Se connecter / S'enregistrer
Votre question

question sur les structures et les tableau [c]

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
9 Janvier 2008 19:14:51

Salut

j'ai une question, je suis en train de lire le tuto sur les structure en c sur le sdz. à un moment du tuto il y a un execercice, mais il y a un ou deux trucs que je n'ai pas compris sur le tuto. l'exercice consiste à afficher les info du joueur avec une boucle (const Personne joueurs[2];)

il y a juste une chose que je ne comprend pas trop ^^ c'est comment faire pour afficher les info qui se trouve dans joueur[0].nom (par exemple) et joueur[1].nom ?

Autres pages sur : question structures tableau

Anonyme
9 Janvier 2008 19:20:22

joueur[0].nom désigne directement la chaine de caractère (si nom en est bien une)
donc tu affiches joueur[0].nom comme si tu affichais une chaine normale
9 Janvier 2008 19:30:36

ca encore ca va, mon gros problème surtous c'est dans la structure. j'ai fait ca pour le moment:

main.c:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "prototype.h"
  4. int main(int argc, char *argv[])
  5. {
  6.  
  7. joueur joueur[2];
  8. long i =0, nombre = 0;
  9. for (i = 0; i < 2; i++)
  10. {
  11. nombre = i + 1;
  12. printf("joueur %ld\n", nombre);
  13. printf("entre un nom:");
  14. scanf("%s", joueur[i].nom);
  15. printf("\nentre un age:");
  16. scanf("%ld\n", joueur[i].age);
  17. }
  18. printf("joueur1: nom: %s, age: %ld, joueur2 nom: %s, age: %ld\n", joueur[0].nom, joueur[0].age, joueur[1].nom, joueur[1].age);
  19.  
  20. system("PAUSE");
  21. return 0;
  22. }


prototype.h:
  1. typedef struct personne joueur;
  2.  
  3. struct personne
  4. {
  5. char nom[100];
  6. long age;
  7.  
  8. };
Contenus similaires
10 Janvier 2008 12:26:07

Va revoir un peu le scanf :)  !

scanf prend l'adresse de ta variable donc :

  1. scanf( "%s" , &joueur[i].nom );


Ensuite ton deuxième scanf : il faut virer le "\n" inutile dans ce cas là et même problématique

Avec ces modifs ton programme devrait fonctionner mais moi je changerais quelques trucs :

- un boucle pour l'affichage à la fin
- suppression de la variable nombre qui ne sert à rien ( remplacer directement nombre par i+1 dans ton printf )
- un nom différent pour ta structure et ton tableau ou alors tu fais directement un tableau de structures dans ta déclaration
- un #define pour le nombre de joueurs c'est mieux :) 
10 Janvier 2008 19:58:02

j'ai pas fait attention en mettant /n dans le scanf :) 

apres j'ai mis une boucle d'affichage et mis i+1 à la place de nombre

mais il y a un truc que je ne comprend pas, pourquoi mettre define ?
a b L Programmation
10 Janvier 2008 20:22:21

maxcailla a dit :
Va revoir un peu le scanf :)  !

scanf prend l'adresse de ta variable donc :

  1. scanf( "%s" , &joueur[i].nom );


Ensuite ton deuxième scanf : il faut virer le "\n" inutile dans ce cas là et même problématique

Avec ces modifs ton programme devrait fonctionner mais moi je changerais quelques trucs :

- un boucle pour l'affichage à la fin
- suppression de la variable nombre qui ne sert à rien ( remplacer directement nombre par i+1 dans ton printf )
- un nom différent pour ta structure et ton tableau ou alors tu fais directement un tableau de structures dans ta déclaration
- un #define pour le nombre de joueurs c'est mieux :) 


Si joueur.nom est un char *, c'est déjà un pointeur, il ne faut pas mettre le &, par contre sur l'age (qui n'est pas un pointeur) il faut le mettre l'adresse avec & pour que la fonction puisse faire les modifications.

Le define, c'est parce que lorsque tu aura pas mal de code, le jour où tu voudra changer ce nombre, tu vas devoir faire des modifs partout et ça ne marchera pas (tu oublieras forcément quelque chose), alors que si tu bosses dès le début avec un #define, tu n'auras qu'a changer ça si un jour tu veux augmenter le nombre de joueurs.
Mieux vaut prendre les bonnes habitudes dès le début ;) 
10 Janvier 2008 20:42:02

CRicky a dit :
Si joueur.nom est un char *, c'est déjà un pointeur


Oupps oui excuse.

Sinon moi je te propose le fichier "prototype.h" comme ça :
  1. #define NB_JOUEUR 2
  2.  
  3. struct personne
  4. {
  5. char * nom[100];
  6. long age;
  7. }joueur[NB_JOUEUR]=
  8. {
  9.  
  10. { 0 , 0 },
  11. { 0 , 0 }
  12.  
  13. };


En gros tu déclares ici ton tableau joueur qui contient les 2 éléments de ta structure, les 0 servent pour l'initialisation tu les actualiseras par la suite avec tes scanf.
Lorsque que tu voudras ajouter un troisième joueur il te suffira alors de changer la valeur de ton #define et de rajouter une ligne { 0 , 0 } dans ton tableau, propre et pratique ;) 

EDIT : tu dois mettre des NB_JOUEUR aussi dans tes boucles for
10 Janvier 2008 20:52:16

oki

merci pour les info
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS