Rechercher : dans
Par :

Initialiser tableau struct pointeur

Dernière réponse le 8 jan 2009 à 20:07:20 goldorak, le 8 jan 2009 à 11:03:37 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP

Meilleures réponses pour « initialiser tableau struct pointeur » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
[Windows XP] Points de restauration Voir1 - Points de restauration et données personnelles 2 - Vérifier le service 3 - Paramétrer les partitions à restaurer 4 - Remarque 5 - Taille de la sauvegarde et nettoyage 6 - Créer un point de restauration 7 - Restaurer un point de...
[Gestionnaire de périphériques] Point d'exclamation jaune VoirDans le gestionnaire des périphériques de Windows, une ligne apparaît avec un point d'exclamation dans un triangle jaune. Cela signifie qu'un périphérique branché sur l'un des ports USB de l'ordinateur n'est pas reconnu car le pilote approprié n'a...
Les pointeurs en langage C VoirDéfinition d'un pointeur Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. La notion de pointeur fait souvent peur car il s'agit d'une technique de programmation très puissante, permettant de définir des...
Langage C - Les tableaux VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...
Les tableaux en langage C++ VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...

1

Char Snipeur, le 8 jan 2009 à 11:56:10

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. Salutation !
Char Snipeur

Répondre à Char Snipeur

2

 goldorak, le 8 jan 2009 à 20:07:20

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.

Répondre à goldorak