Passage d'un double tableau à une fonction C

Fermé
Guest1234 - Modifié par Guest1234 le 17/07/2011 à 22:43
 Guest1234 - 18 juil. 2011 à 00:16
Bonjour,
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:

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
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,
3
Ca marche comme ça ! Merci beaucoup
0
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
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;
}
2
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
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
0
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");
     }
}
     
0
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
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
0
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
conseil: quand une boucle contient plus d'une instruction, utilise les accolades.
0

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");
}
}
0
Petit problème reglé, j'ai enlevé les 20 en argument de printLab et mit les bonnes valeurs, mais ça plante toujours
0
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
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");
}
}
0