Test(variable personaliser+tableau+boucle)

Résolu
Signaler
Messages postés
5
Date d'inscription
samedi 6 juin 2009
Statut
Membre
Dernière intervention
23 septembre 2010
-
Messages postés
5
Date d'inscription
samedi 6 juin 2009
Statut
Membre
Dernière intervention
23 septembre 2010
-
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

Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
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
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
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
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
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
Messages postés
5
Date d'inscription
samedi 6 juin 2009
Statut
Membre
Dernière intervention
23 septembre 2010

Pour la taille du tableau on compte bien 0,1,2 sa fait donc 3? non
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
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
Messages postés
5
Date d'inscription
samedi 6 juin 2009
Statut
Membre
Dernière intervention
23 septembre 2010

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.
Messages postés
5
Date d'inscription
samedi 6 juin 2009
Statut
Membre
Dernière intervention
23 septembre 2010

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];
};