Test(variable personaliser+tableau+boucle)

Résolu
florent175 Messages postés 5 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 23 septembre 2010 - 22 sept. 2010 à 23:01
florent175 Messages postés 5 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 23 septembre 2010 - 23 sept. 2010 à 15:42
Je ne comprend pas d'où vient l'erreur dans mon code ci dessous.
Le programme doit récupéré le nom, le prénom, puis l'adresse de 3joueurs et afficher les donner recueilli a la fin
Pouvez vous me donner une explication pour que je comprenne? Merci à tous.

Dans le main.c:

#include <stdlib.h>
#include <stdio.h>
#include "main.h"

int main(int argc, char *argv[])
{
    Personnes information[2] = {0};
    int joueur = 0;
while (joueur < 3)
{
 printf ("Votre nom?\n");
 scanf ("%s", information[0].nom);
 printf ("Votre prenom?\n");
 scanf ("%s", information[0].prenom);
 printf ("Ou habitez vous?\n");
 scanf ("%s", information[0].adresse);
 printf ("\n\n");

 joueur++;
}

printf ("joueur 1:\n nom- %s\n prenom- %s\n adresse- %s\n\n", information[0].nom, information[0].prenom, information[0].adresse);
printf ("joueur 2:\n nom- %s\n prenom- %s\n adresse- %s\n\n", information[1].nom, information[1].prenom, information[1].adresse);
printf ("joueur 3:\n nom- %s\n prenom- %s\n adresse- %s\n\n", information[2].nom, information[2].prenom, information[2].adresse);
return 0;
}

================================
Dans le main.h:

typedef struct Personnes Personnes;
struct Personnes
{
  char nom[100]  = {0};
  char prenom[100] = {0};
  char adresse[100] = {0};
};

7 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 sept. 2010 à 15:12
J'ai repris ton code avec les remarques que je t'ai faite (plus quelques petites retouches mineures), et ça fonctionne parfaitement.

#include <stdlib.h>
#include <stdio.h>

typedef struct
{
  char nom[100];
  char prenom[100];
  char adresse[100];
} Personne;

int main(void)
{
  const int size = 3;
  Personne informations[size];
  int joueur = 0;

  while (joueur < size)
  {
    printf("Votre nom?\n");
    scanf("%s", informations[joueur].nom);
    printf("Votre prenom?\n");
    scanf("%s", informations[joueur].prenom);
    printf("Ou habitez vous?\n");
    scanf("%s", informations[joueur].adresse);
    printf("\n\n");
    ++joueur;
  }

  joueur = 0;
  while (joueur < size)
  {
    printf("joueur %i:\n nom: %s\n prenom: %s\n adresse: %s\n\n",
   joueur + 1,
   informations[joueur].nom,
   informations[joueur].prenom,
   informations[joueur].adresse);
    ++joueur;
  }

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 sept. 2010 à 10:15
Dans le while, tu indiques toujours [0], ça devrait être un indice.
Donc: information[0] => information[joueur]

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 sept. 2010 à 10:31
Et aussi: ton tableau doit avoir une taille de 3 et noon une taille de 2.
Donc: Personnes information[2] => Personnes information[3].

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
florent175 Messages postés 5 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 23 septembre 2010
23 sept. 2010 à 11:30
Pour la taille du tableau on compte bien 0,1,2 sa fait donc 3? non
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
23 sept. 2010 à 11:36
Non. Ne pas confondre taille et indice.

Si tu as un tableau de 1 élément alors tu as l'élément 0.
Si tu as un tableau de 2 éléments alors tu as les éléments 0 et 1.
Si tu as un tableau de 3 éléments, alors tu as les éléments 0, 1 et 2.

Donc c'est bien un tableau de 3 éléments dont tu as besoin, que tu vas parcourir de 0 à 2.

Soit:
Personnes information[3];
while (joueur < 3)
{
etc...

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
florent175 Messages postés 5 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 23 septembre 2010
23 sept. 2010 à 15:05
Lorsque les donner sont récupérer le programme doit afficher les donner recueilli mais le problème c'est qu'il n'affiche pas les donner recueilli plutôt des trace de passage d'autre programme a part pour joueur1 ou il affiche les donner du joueur3.
0
florent175 Messages postés 5 Date d'inscription samedi 6 juin 2009 Statut Membre Dernière intervention 23 septembre 2010
23 sept. 2010 à 15:42
Merci beaucoup.
Grâce a l'exemple que tu ma montrer j'ai put comprendre d'où venez l'erreur.
Le problème venez de l'initialisation a "0".

Voici ma version ci dessous:

main.c
#include <stdlib.h>
#include <stdio.h>
#include "main.h"

int main(int argc, char *argv[])
{
    Personnes information[3];
    int joueur = 0;
while (joueur < 3)
{
 printf ("Votre nom?\n");
 scanf ("%s", information[joueur].nom);
 printf ("Votre prenom?\n");
 scanf ("%s", information[joueur].prenom);
 printf ("Ou habitez vous?\n");
 scanf ("%s", information[joueur].adresse);
 printf ("\n\n");
      joueur++;
}

printf ("joueur 1:\n nom- %s\n prenom- %s\n adresse- %s\n\n", information[0].nom, information[0].prenom, information[0].adresse);
printf ("joueur 2:\n nom- %s\n prenom- %s\n adresse- %s\n\n", information[1].nom, information[1].prenom, information[1].adresse);
printf ("joueur 3:\n nom- %s\n prenom- %s\n adresse- %s\n\n", information[2].nom, information[2].prenom, information[2].adresse);
return 0;
}

main.h
typedef struct Personnes Personnes;
struct Personnes
{
  char nom[100];
  char prenom[100];
  char adresse[100];
};


0
Rejoignez-nous