Initialiser tableau struct pointeur

Fermé
goldorak - 8 janv. 2009 à 11:03
 goldorak - 8 janv. 2009 à 20:07
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.

1 réponse

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
8 janv. 2009 à 11:56
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.
0
Le programme marche si je n'ai pas rajouter la fonction initialiserJoueur.

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.
0