Probleme tableau 2 dimensions + structure en C

Probleme tableau 2 dimensions + structure en C - C - Programmation

Marsh Posté le 25-02-2006 à 15:12:53    

Salut,
 
Je fait un petit programme qui utlise un tableau deux dimensions dont les cases sont des enregistrements (structures).
J'ai un probleme lorsque j'essaye de mettre une valeur dans le tableau lorsque je ne suis pas dans le programme principal (sous programme).
 
Ex :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. struct contenuGrille
  5.     {
  6.            int valeur;
  7.            int rempli;
  8.            int certain;
  9.     };
  10. void recupereValeursConnues(struct contenuGrille *grilleAPasser);
  11. int main()
  12. {
  13.     struct contenuGrille grille [15][15];
  14.    
  15.     recupereValeursConnues(*grille);   
  16.     return 0;
  17. }
  18. void recupereValeursConnues(struct contenuGrille *grilleAPasser)
  19. {
  20.     scanf("%d",&temp1);
  21.     scanf("%d",&temp2);
  22.     scanf("%d",&temp3);
  23.     grilleAPasser[temp1][temp2].valeur = temp3;       
  24.  
  25. }


 
Il bloque sur la ligne "grilleAPasser[temp1][temp2].valeur = temp3" en disant "suscripted value is neither array nor pointer". j'ai essayé de mettre une etoile devant ou un "&" mais ca change rien il en veux aps quant meme :( Comment je fait pour modifier cette grille en etant dans un sous programme ? j'ai pourtant bien passé l'adresse de la grille avec l'etoile ?
 
Merci d'avance de votre aide, ca doit etre un truc tout con mais je vois pas :(

Message cité 1 fois
Message édité par cheetwoox le 25-02-2006 à 15:13:25
Reply

Marsh Posté le 25-02-2006 à 15:12:53   

Reply

Marsh Posté le 25-02-2006 à 15:22:27    

cheetwoox a écrit :


Code :
  1. void recupereValeursConnues(struct contenuGrille *grilleAPasser)
  2. <...>
  3. {
  4.     struct contenuGrille grille [15][15];
  5.    
  6.     recupereValeursConnues(*grille);   
  7. }




A vue de nez, ce genre de code devrait générer 300.000 warnings et erreurs...
 
http://mapage.noos.fr/emdel/notes.htm#param_tab


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 25-02-2006 à 15:33:21    

j'ai regardé mais j'y comprend pas grand chose... :(
je pensait qu'en passant l'adresse du tableau on pouvait ensuite le traiter il me semblait l'avoir fait avec un tableau a une dimension, mais apparement le fait qu'iol y en ait deux (des dimensions) et des structures ca ne lui plait pas :(

Reply

Marsh Posté le 25-02-2006 à 15:45:50    

Citation :

je pensait qu'en passant l'adresse du tableau on pouvait ensuite le traiter


 
oui mais tu ne passes pas son adresse, tu confonds l'opérateur de déférencement * avec l'opérateur 'adresse de' & et le nom d'un tableau désigne déja son adresse (l'adresse de son premier élément)
 

Citation :

mais apparement le fait qu'iol y en ait deux (des dimensions) et des structures ca ne lui plait pas


 
non c'est pareil

Code :
  1. int tab[15];
  2. int * p = tab;
  3. int tab2[15][20];
  4. int (*p2)[20] = tab2;


 
pour le passage à une fonction, elle peut avoir comme prototype

Code :
  1. void f(int (*tab2)[20]);


ou

Code :
  1. void f(int tab2[15][20]);


ou

Code :
  1. void f(int tab2[][20]);

Reply

Marsh Posté le 25-02-2006 à 15:45:52    

Code :
  1. void recupereValeursConnues(struct contenuGrille *grilleAPasser);
  2. int main()
  3. {
  4.     struct contenuGrille grille [15][15];
  5.    
  6.     recupereValeursConnues(&grille);   
  7.     return 0;
  8. }


 
Meme comme ça cela ne fonctionne pas :( Il n'y a que si je passe mon tableau a 1 dimension que cela marche :(

Reply

Marsh Posté le 25-02-2006 à 15:48:30    

je vais reessayer en mettant tout en int pour voir si j'arrive a y faire marcher, on verra les struct apres ^^

Reply

Marsh Posté le 25-02-2006 à 15:48:32    

Reply

Marsh Posté le 25-02-2006 à 15:53:42    

c bon je crois que ca marche, fallais juste rajouter les dimensions dans le prototype comme tu l'as marque plus haut ^^ Merci beaucoup !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed