Tableau de struct
Résolu
Laura
-
Laura -
Laura -
Bonjour,
j'ai défini une structure comme ceci :
et j'aimerai faire une fonction qui initialise un tableau de pionts, j'ai tenté ceci :
mais je ne comprends pas pourquoi il y a une erreur ?
j'ai défini une structure comme ceci :
typedef struct piont piont;
struct piont{
char etat;
char lettre;
int ligne;
piont *est, *ouest, *n_est, *n_ouest, *s_est, *s_ouest;
};
et j'aimerai faire une fonction qui initialise un tableau de pionts, j'ai tenté ceci :
void initialisation(piont *plateau){
int i;
for (i=0; i<10; i++) {
plateau[i] = {'B', 'I', i, NULL, NULL, NULL, NULL, NULL, NULL}; // erreur ici
}
}
mais je ne comprends pas pourquoi il y a une erreur ?
A voir également:
- Tableau de struct
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
4 réponses
Oui j'ajouterais que visiblement vu que c'est un plateau de 64 cases donc j'imagine 8*8, il serait plus logiques d'avoir un plateau du genre :
... car d'un point de vue "design" je ne vois pas pourquoi un pion a des raisons de stocker les éventuels pions adjacents, ce n'est pas ce qui caractérise un pion. Par exemple si tu codes un jeu d'échec, ce qui caractérise un pion, c'est sa nature (pion, tour, cavalier...) et sa couleur (noir ou blanc).
Bonne chance
#include <stdlib.h>
#include <assert.h>
#define NUM_ROWS 8
#define NUM_COLS 8
typedef struct case_t {
pion_t * pion; // NULL si vide, adresse du pion_t sinon
};
// plateau[i][j] désigne la case (i, j), avec
// 0 <= i < NUM_ROWS
// 0 <= j < NUM_COLS
typedef plateau_t {
case_t ** cases;
} plateau_t;
plateau_t * new_plateau() {
size_t i;
plateau_t * plateau = malloc(sizeof(plateau_t));
plateau->cases = NUM_ROWS * sizeof(case_t *));
for(i = 0; i < NUM_COLS; ++i) {
plateau->cases[i] = malloc(NUM_COLS * sizeof(case_t));
}
return plateau;
}
void free_plateau(plateau_t * plateau) {
for(i = 0; i < NUM_COLS; ++i) {
free(plateau->cases[i]);
}
free(plateau->cases);
free(plateau);
}
pion_t * get_piece(size_t i, size_t j) {
assert(i < NUM_ROWS);
assert(j < NUM_COLS);
return plateau->cases[i][j];
}
void set_piece(size_t i, size_t j, pion_t * pion) {
assert(i < NUM_ROWS);
assert(j < NUM_COLS);
plateau->cases[i][j] = pion;
}
typedef struct pion_t {
char etat;
char lettre;
} pion_t;
int main() {
plateau_t * plateau = new_plateau();
// place/récupère des pieces avec get_piece et set_piece
free_plateau(plateau);
return 0;
}
... car d'un point de vue "design" je ne vois pas pourquoi un pion a des raisons de stocker les éventuels pions adjacents, ce n'est pas ce qui caractérise un pion. Par exemple si tu codes un jeu d'échec, ce qui caractérise un pion, c'est sa nature (pion, tour, cavalier...) et sa couleur (noir ou blanc).
Bonne chance
Salut Laura,
Tu as une erreur dans :
car cette notation permettant l'initialisation n'est permise qu'à l'occasion de la déclaration.
Ta fonction devrait donc ressembler à ceci (avec les aménagements à la struct proposés par mamiemando) :
Dal
Tu as une erreur dans :
plateau[i] = {'B', 'I', i, NULL, NULL, NULL, NULL, NULL, NULL};
car cette notation permettant l'initialisation n'est permise qu'à l'occasion de la déclaration.
Ta fonction devrait donc ressembler à ceci (avec les aménagements à la struct proposés par mamiemando) :
void initialisation(pion_t *plateau)
{
int i;
for (i = 0; i < 10; i++)
{
plateau[i].etat = 'B';
plateau[i].lettre = 'I';
plateau[i].ligne = i;
plateau[i].e = plateau[i].w =
plateau[i].nw = plateau[i].ne =
plateau[i].sw = plateau[i].se = NULL;
}
}
Dal
Alors à ta place je noterais "piont" plutôt "pion_t" pour respecter les conventions usuelles du C. Ensuite pour plus de lisibilité je noterais directement est, ouest, n_ouest etc... n, e, nw. Bon mais ça c'est du détail :-)
Pour créer un pion tu peux écrire :
Bonne chance
Pour créer un pion tu peux écrire :
#include <stdlib.h>
typedef struct pion_t{
char etat;
char lettre;
int ligne;
struct pion_t *e, *w, *nw, *ne, *sw, *se;
} pion_t;
int main() {
pion_t pion = {
.etat = 'B',
.lettre = 'I',
.ligne = 1,
.e = NULL,
.w = NULL,
.ne = NULL,
.nw = NULL,
.se = NULL,
.sw = NULL
};
return 0;
}
Bonne chance
[Dal] <-- ému