Initialiser tableau struct pointeur
goldorak
-
goldorak -
goldorak -
Bonjour,
J'ai un code qui ne fonctionne pas, quelqu'un sait pourquoi ?
typedef struct Personne Personne;
struct Personne
{
char nom[100];
char prenom[100];
char adresse[100];
long age[4];
char sexe[1];
};
void initialiserJoueur(Personne *joueur[nbr]);
int main(int argc, char *argv[])
{
Personne joueur[nbr];
initialiserJoueur(&joueur[nbr]);
long i = 0;
for ( i = 0 ; i < 2 ; i++)
{
printf("joueur %ld\n", i+1);
printf("Quel est votre nom ? ");
scanf("%s", joueur[i].nom);
printf("Quel est votre prenom ? ");
scanf("%s", joueur[i].prenom);
printf("Quel est votre adresse ? ");
scanf("%s", joueur[i].adresse);
printf("Quel est votre age ? ");
scanf("%ld",&joueur[i].age);
printf("Quel est votre sexe ? (M ou F)");
scanf("%s", joueur[i].sexe);
printf("%s %s, adresse : %s, %ld ans, de sexe %s\n\n", joueur[i].nom, joueur[i].prenom, joueur[i].adresse, *joueur[i].age, joueur[i].sexe);
}
system("PAUSE");
return 0;
}
void initialiserJoueur(Personne *joueur[nbr])
{
(*joueur).nom = "";
(*joueur).prenom = "";
(*joueur).adresse = "";
(*joueur).age = 0;
(*joueur).sexe = "";
}
L'ordi il m'affiche :
In function 'main':
[Warning] passing arg 1 of 'initialiserJoueur' from incompatible pointer type
In function 'initialiserJoueur'
request for member 'nom' in someting not a structure or union
request for member 'prenom' in someting not a structure or union
request for member 'adresse' in something not a structure or union
request for member 'age' in something not a structure or union
request for member 'sexe' in someting not a structure or union
[Build Error] [main.o] Error 1
C'est quoi un "pointer type" ? et pourquoi il me met "not a structure or union" ?
Toute réponse bienvenue ; Merci d'avance.
J'ai un code qui ne fonctionne pas, quelqu'un sait pourquoi ?
typedef struct Personne Personne;
struct Personne
{
char nom[100];
char prenom[100];
char adresse[100];
long age[4];
char sexe[1];
};
void initialiserJoueur(Personne *joueur[nbr]);
int main(int argc, char *argv[])
{
Personne joueur[nbr];
initialiserJoueur(&joueur[nbr]);
long i = 0;
for ( i = 0 ; i < 2 ; i++)
{
printf("joueur %ld\n", i+1);
printf("Quel est votre nom ? ");
scanf("%s", joueur[i].nom);
printf("Quel est votre prenom ? ");
scanf("%s", joueur[i].prenom);
printf("Quel est votre adresse ? ");
scanf("%s", joueur[i].adresse);
printf("Quel est votre age ? ");
scanf("%ld",&joueur[i].age);
printf("Quel est votre sexe ? (M ou F)");
scanf("%s", joueur[i].sexe);
printf("%s %s, adresse : %s, %ld ans, de sexe %s\n\n", joueur[i].nom, joueur[i].prenom, joueur[i].adresse, *joueur[i].age, joueur[i].sexe);
}
system("PAUSE");
return 0;
}
void initialiserJoueur(Personne *joueur[nbr])
{
(*joueur).nom = "";
(*joueur).prenom = "";
(*joueur).adresse = "";
(*joueur).age = 0;
(*joueur).sexe = "";
}
L'ordi il m'affiche :
In function 'main':
[Warning] passing arg 1 of 'initialiserJoueur' from incompatible pointer type
In function 'initialiserJoueur'
request for member 'nom' in someting not a structure or union
request for member 'prenom' in someting not a structure or union
request for member 'adresse' in something not a structure or union
request for member 'age' in something not a structure or union
request for member 'sexe' in someting not a structure or union
[Build Error] [main.o] Error 1
C'est quoi un "pointer type" ? et pourquoi il me met "not a structure or union" ?
Toute réponse bienvenue ; Merci d'avance.
A voir également:
- Initialiser tableau struct pointeur
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
1 réponse
Personne joueur[nbr];
initialiserJoueur(&joueur[nbr]);
donc joueur est un tableau de nbr cases de type Personne ok ?
Donc lorsque tu passe &joueur[nbr] à la fonction, tu passe le pointeur vers la case nbr de joueur, donc de type Personne*.
Déjà une grosse erreur ici, la case numéro nbr n'existe pas, car tu commence à 0 tout tableau ! Ce qui te causera une erreur de segmentation.
Pour en revenir à ton problème, la prototype de ta fonction est déclaré ainsi :
void initialiserJoueur(Personne *joueur[nbr])
Je ne suis pas tout à fait sur (je n'aime les déclarations en tableau, c'est tordu) mais là joueur est un tableau de nbr cases contenant des pointeur de Personne (contenant des Personne*), et comme tu lui passe une variable de type Personne* c'est normal qu'il râle.
Une bonne grosse révision (apprentissage ?) des tableaux et pointeurs en C ne te ferai pas de mal. C'est une erreur très classique. En survolant ton programme, j'en vois d'ailleur, une quantité... presque une par ligne.
initialiserJoueur(&joueur[nbr]);
donc joueur est un tableau de nbr cases de type Personne ok ?
Donc lorsque tu passe &joueur[nbr] à la fonction, tu passe le pointeur vers la case nbr de joueur, donc de type Personne*.
Déjà une grosse erreur ici, la case numéro nbr n'existe pas, car tu commence à 0 tout tableau ! Ce qui te causera une erreur de segmentation.
Pour en revenir à ton problème, la prototype de ta fonction est déclaré ainsi :
void initialiserJoueur(Personne *joueur[nbr])
Je ne suis pas tout à fait sur (je n'aime les déclarations en tableau, c'est tordu) mais là joueur est un tableau de nbr cases contenant des pointeur de Personne (contenant des Personne*), et comme tu lui passe une variable de type Personne* c'est normal qu'il râle.
Une bonne grosse révision (apprentissage ?) des tableaux et pointeurs en C ne te ferai pas de mal. C'est une erreur très classique. En survolant ton programme, j'en vois d'ailleur, une quantité... presque une par ligne.
En faite, je m'initie avec le site du zéro. Je peux rien dire si c'est tordu ou pas de mettre des tableaux en argument, mais c'est ce qu'il conseille dans ce site, ou alors j'ai mal lu... qui sait c'est mes premiers jours de découverte dans le monde de la programmation.
En ce qui concerne nbr, je crois bien qu'il ne sert effectivement à rien... si j'ai bien compris.
Tu me dis que tu vois des ...boulettes... au fil de chaque ligne, presque. Peux tu m'en dire plus.
^^ sincerement.