A voir également:
- Passage d'un double tableau à une fonction C
- Double ecran - Guide
- Tableau croisé dynamique - Guide
- Whatsapp double sim - Guide
- Fonction si et - Guide
- Tableau ascii - Guide
5 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
18 juil. 2011 à 00:12
18 juil. 2011 à 00:12
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,
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
17 juil. 2011 à 23:50
17 juil. 2011 à 23:50
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; }
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
231
Modifié par keurdange le 17/07/2011 à 23:24
Modifié par keurdange le 17/07/2011 à 23:24
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"); } }
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
231
17 juil. 2011 à 23:47
17 juil. 2011 à 23:47
au lieu de int lab[20][20] = {0}; essaie de faire seulement int lab[20][20]; c'est à dire sans initialiser le tableau à 0. je sais plus quel element mais t'as initialier 1 element du tableau donc enlève et essaie
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
231
17 juil. 2011 à 23:49
17 juil. 2011 à 23:49
conseil: quand une boucle contient plus d'une instruction, utilise les accolades.
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");
}
}
keurdange
Messages postés
720
Date d'inscription
lundi 8 novembre 2010
Statut
Membre
Dernière intervention
13 juillet 2016
231
18 juil. 2011 à 00:07
18 juil. 2011 à 00:07
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");
}
}
18 juil. 2011 à 00:16