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 ?
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, -
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 -
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");
}
}-
-
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");
}
}
-