Passage d'un double tableau à une fonction C

Guest1234 -  
 Guest1234 -
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 ?

5 réponses

  1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
    1. Guest1234
       
      Ca marche comme ça ! Merci beaucoup
      0
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  3. keurdange Messages postés 816 Statut Membre 232
     
    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
  4. Guest1234
     
    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
    1. keurdange Messages postés 816 Statut Membre 232
       
      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
    2. keurdange Messages postés 816 Statut Membre 232
       
      conseil: quand une boucle contient plus d'une instruction, utilise les accolades.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Guest1234
     
    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
    1. Guest1234
       
      Petit problème reglé, j'ai enlevé les 20 en argument de printLab et mit les bonnes valeurs, mais ça plante toujours
      0
    2. keurdange Messages postés 816 Statut Membre 232
       
      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