Passage d'un double tableau à une fonction C
Guest1234
-
Guest1234 -
Guest1234 -
Bonjour,
Je tente de faire passer un double tableau à une fonction, mais ça bug, voici le code :
Dev C++ me dit "22 main.c invalid use of array with unspecified bounds "
Pouvez-vous m'aider ?
Je tente de faire passer un double tableau à une fonction, mais ça bug, voici le code :
#include <stdio.h> #include <stdlib.h> void printLab (int lab[][], int x, int y); int main () { int i; int lab[20][20] = {1,1,1,1,1,1,1,1,1,1,1,1}; printLab(lab, 20, 20); system ("PAUSE"); return 0; } void printLab (int lab[][], int x, int y) { int i, j; for(i=0; i<x; ++i) for(j=0; j<y; ++i) printf("%d", lab[x][y]); // <== ici ca bug }
Dev C++ me dit "22 main.c invalid use of array with unspecified bounds "
Pouvez-vous m'aider ?
A voir également:
- Passage d'un double tableau à une fonction C
- Double ecran - Guide
- Tableau word - Guide
- Whatsapp double sim - Guide
- Fonction si et - Guide
- Trier un tableau excel - Guide
5 réponses
Bonjour,
Juste par rapport au message initial, l'erreur est très simple et classique.
void printLab (int lab[][], int x, int y);
Le compilateur ne sait pas gérer le pointeur lab puisqu'il ne connait pas la dimension des colonnes. Il faut donc juste mettre int lab[][20] dans le prototype. Et ça marchera.
Tiens-nous au courant.
Cdlt,
Juste par rapport au message initial, l'erreur est très simple et classique.
void printLab (int lab[][], int x, int y);
Le compilateur ne sait pas gérer le pointeur lab puisqu'il ne connait pas la dimension des colonnes. Il faut donc juste mettre int lab[][20] dans le prototype. Et ça marchera.
Tiens-nous au courant.
Cdlt,
Guest1234
Ca marche comme ça ! Merci beaucoup
Essayes comme ceci...
#include <stdio.h> #include <stdlib.h> #define XMAX 20 #define YMAX 20 void printLab(int *lab) { int x,y; for(x=0; x<XMAX; x++) { for(y=0; y<YMAX; y++) printf("%d\t",lab[y+x*YMAX]); printf("\n"); } } int main () { int lab[XMAX][YMAX]; int x,y; for(x=0; x<XMAX; x++) for(y=0; y<YMAX; y++) { printf("tab[%d][%d] = ",x,y); scanf("%d",&lab[x][y]); } printLab(*lab); system("PAUSE"); return 0; }
t'as essayé ca :
void printLab (int lab[][], int x, int y)
{
for(int i=0; i<x; i++)
{
for(int j=0; j<y; j++)
printf("%d", lab[i][j]); // <== ca bug toujours?
}
}
J'ai fait i++ car de 0 jusqu'a taille-1, on a tous les elements du tableau. Et avant d'afficher, faudrait penser d'abord à remplir le tableau.
void printLab (int lab[][], int x, int y)
{
for(int i=0; i<x; i++)
{
for(int j=0; j<y; j++)
{
printf("Donner tab[%d][%d], i,j");
scanf("%d", &tab[i][j]);
}
}
for(int i=0; i<x; i++)
{
for(int j=0; j<y; i++)
printf("%d", lab[i][j]); // <== ca bug toujours?
}
}
ou si tu preferes, tu peux faire la saisie dans le programme principale (main) et afficher grâce à la fonction ou saisir et afficher en même temps grâce à la fonction comme ci haut décrit. tout depend de toi
Dieu n'a fait qu'ébaucher l'homme, c'est sur terre que chacun se crèe
void printLab (int lab[][], int x, int y)
{
for(int i=0; i<x; i++)
{
for(int j=0; j<y; j++)
printf("%d", lab[i][j]); // <== ca bug toujours?
}
}
J'ai fait i++ car de 0 jusqu'a taille-1, on a tous les elements du tableau. Et avant d'afficher, faudrait penser d'abord à remplir le tableau.
void printLab (int lab[][], int x, int y)
{
for(int i=0; i<x; i++)
{
for(int j=0; j<y; j++)
{
printf("Donner tab[%d][%d], i,j");
scanf("%d", &tab[i][j]);
}
}
for(int i=0; i<x; i++)
{
for(int j=0; j<y; i++)
printf("%d", lab[i][j]); // <== ca bug toujours?
}
}
ou si tu preferes, tu peux faire la saisie dans le programme principale (main) et afficher grâce à la fonction ou saisir et afficher en même temps grâce à la fonction comme ci haut décrit. tout depend de toi
Dieu n'a fait qu'ébaucher l'homme, c'est sur terre que chacun se crèe
Après correction de quelques bugs, mon nouveau code bug toujours au même endroit :
#include <stdio.h> #include <stdlib.h> void printLab (int lab[][], int x, int y); int main () { int i, j; int lab[20][20] = {0}; for(i=0; i<20; i++) { for(j=0; j<20; j++) { printf("Donner tab[%d][%d]", i,j); scanf("%d", &lab[i][j]); } } printLab(lab, 20, 20); system ("PAUSE"); return 0; } void printLab (int lab[][], int x, int y) { int i, j; for(i=0; i<y; i++) { for(j=0; j<x; j++) printf("%d", lab[i][j]); printf("\n"); } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon j'ai réussi à le faire marcher en changeant le prototype de printLab en corrigeant int lab[][] par int **lab mais maintenant que je lance le programme, j'ai le droit a "laby.exe à rencontrer un problème et doit fermer", une idée ?
Le nouveau code (j'ai virer l'initialisation dans la boucle et mit ça direct au début parce que c'était chiant de tout le temps le retaper)
#include <stdio.h>
#include <stdlib.h>
void
printLab (int **lab, int x, int y);
int
main ()
{
int i, j, x = 4, y =4;
int lab[4][4] = {1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1};
printLab(lab, 20, 20);
system ("PAUSE");
return 0;
}
void
printLab (int **lab, int x, int y)
{
int i, j;
for(i=0; i<y; i++) {
for(j=0; j<x; j++)
printf("%d", lab[i][j]);
printf("\n");
}
}
Le nouveau code (j'ai virer l'initialisation dans la boucle et mit ça direct au début parce que c'était chiant de tout le temps le retaper)
#include <stdio.h>
#include <stdlib.h>
void
printLab (int **lab, int x, int y);
int
main ()
{
int i, j, x = 4, y =4;
int lab[4][4] = {1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1};
printLab(lab, 20, 20);
system ("PAUSE");
return 0;
}
void
printLab (int **lab, int x, int y)
{
int i, j;
for(i=0; i<y; i++) {
for(j=0; j<x; j++)
printf("%d", lab[i][j]);
printf("\n");
}
}
essaie encore de changer le nom du tableau dans le programme et celui dans la fonction
void
printLab (int **lab1, int x, int y);
int main ()
{
int i, j, x = 4, y =4;
int lab[4][4] = {1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1};
printLab(lab, 4, 4);
system ("PAUSE");
return 0;
}
void printLab (int **lab1, int x, int y)
{
int i, j;
for(i=0; i<y; i++) {
for(j=0; j<x; j++)
printf("%d", lab1[i][j]);
printf("\n");
}
}
void
printLab (int **lab1, int x, int y);
int main ()
{
int i, j, x = 4, y =4;
int lab[4][4] = {1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1};
printLab(lab, 4, 4);
system ("PAUSE");
return 0;
}
void printLab (int **lab1, int x, int y)
{
int i, j;
for(i=0; i<y; i++) {
for(j=0; j<x; j++)
printf("%d", lab1[i][j]);
printf("\n");
}
}