Initialisation d'un tableau à deux dimensions de structure

Initialisation d'un tableau à deux dimensions de structure - C - Programmation

Marsh Posté le 27-09-2003 à 15:15:35    

Salut!
 
j'ai la structure suivante :

Code :
  1. typedef struct carre {
  2.  int etatCarre;
  3.  int idCarre;
  4.  int idFigure;
  5. }carre;


 
J'ai le tableau à deux dimensions suivant :

Code :
  1. carre figConteneur[NBFIGURES][NBCARRESFIG];


 
Et je veux initialiser l'ensemble des champs etatCarre avec des defines de ce type:

Code :
  1. #define FIG1 0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0
  2. #define FIG2 0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0
  3. ...


 
Alors pour l'instant je fais ça:

Code :
  1. carre figConteneur[NBFIGURES][NBCARRESFIG] =  { {FIG1}, {FIG2}, {FIG3}, {FIG4}, {FIG5}, {FIG6}, {FIG7} };


 
Mais j'ai le message suivant à la compilation :

Code :
  1. main.c: In function `main':
  2. main.c:19: warning: missing braces around initializer
  3. main.c:19: warning: (near initialization for `figConteneur[0][0]')


 
Si vous avez une idée ca m'intéresse bien :D

Reply

Marsh Posté le 27-09-2003 à 15:15:35   

Reply

Marsh Posté le 27-09-2003 à 16:24:41    

Fais peter ton code et dis nous dans quel contexte ton prog est utilisé :)

Reply

Marsh Posté le 27-09-2003 à 16:32:53    

Normalement tu dois accéder à tes champs de cette manière:
 
Lors de l'affectation il ne faut pas mettre de type devant, vu que tu as déclaré figConteneur avant.
 
Ensuite tu dois accéder à tes champs avec une ligne du style:
 
figConteneur[x][y].etatCarre = val
 
et de même pour idCarre et idFigure.

Reply

Marsh Posté le 27-09-2003 à 16:38:08    

ben dans es #define, faut faire les regroupements 3 par 3. et apres je te conseille de faire une initilisation etape par étape plutot que tout d'un coup dans une {} qui prends tous les éléments (absolument imbbitable ton truc, heureusmeent que t'as mis des des #, sinon, on aurait pu comprends ton code du premier coup et tu aurais toi meme compris le problème

Reply

Marsh Posté le 27-09-2003 à 16:41:24    

struct dawa
{
        int a, b, c;
};
 
struct dawa tab[][2] = {
        { {1, 2, 3}, {4, 5, 6} },
        { {7, 8, 9}, {10, 11, 12} }
        };

Reply

Marsh Posté le 27-09-2003 à 17:04:32    

Taz a écrit :

struct dawa
{
        int a, b, c;
};
 
struct dawa tab[][2] = {
        { {1, 2, 3}, {4, 5, 6} },
        { {7, 8, 9}, {10, 11, 12} }
        };


 
Je suis d'accord avec ce que tu écris mais :
 
1. Les valeurs dans le #define sont celles du premier champ (etatCarre) pour l'ensemble des carres d'une ligne de figConteneur[NBFIGURES][NBCARRESFIG] (sachant que
NBFIGURES = 7 et NBCARRESFIG=16 j'ai oublié de le préciser).
 
en exemple #define FIG1 contient l'ensemble des valeurs du champ etatCarre pour figConteneur[0][0à15]
 
Je suis peut être pas très clair. C'est sûr que je peux faire une fonction pour faire ça avec des boucles mais si ca avait pu se faire à l'initialisation ça aurait été plus simple pour des modifs ultérieures, comme rajouter des figures.
Mais je cherche peut être trop compliqué.

Reply

Marsh Posté le 27-09-2003 à 17:17:50    

et ? ton problème, c'est juste de la synthaxe .|

Reply

Marsh Posté le 27-09-2003 à 17:23:08    

Taz a écrit :

et ? ton problème, c'est juste de la synthaxe .|


 
Si je reprends ton exemple:
 

Code :
  1. struct dawa tab[][2] = {
  2.        { {1, 2, 3}, {4, 5, 6} },
  3.        { {7, 8, 9}, {10, 11, 12} }
  4.        };


 
Moi mon #define représente le 1, le 4, le 7 et le 10. Et je ne sais donc pas comment lui indiquer ca syntaxiquement.

Reply

Marsh Posté le 27-09-2003 à 17:36:00    

tu travailles avec quelle norme ?

Reply

Marsh Posté le 27-09-2003 à 17:36:57    

heu... je compile en -Wall -ansi -pedantic c'est tout ce que je peux dire.

Reply

Marsh Posté le 27-09-2003 à 17:36:57   

Reply

Marsh Posté le 27-09-2003 à 17:44:52    

ben donc en ANSI, t'as pas de solutions : si tu initialisez, tu dois tout initialiser.

Reply

Sujets relatifs:

Leave a Replay

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