Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec une structure

Sujet résolu
    18 mai 2007 à 12:48:45

    Salut,
    Je continue mon apprentissage du C et j'en arrive aux structures...
    J'ai un petit soucis avec mon programme pourtant simple (surtout pour vous)
    Je vous laisse mon code..
    #include <stdio.h>
    #include <stdlib.h>
    #include "main.h"

    int main(int argc, char *argv[])
    {
        Personne joueur[NOMBRE]={"","",0,0};
        long n=0;
        for (n=0; n<NOMBRE; n++ )
        {
            Personne joueur[n];
            printf("Quel est votre nom ? ");
            scanf("%s", &joueur[n].nom);
            printf("Votre prenom ? ");
            scanf("%s", &joueur[n].prenom);
            printf("\n");
        }
        for (n=0; n<2; n++)
        {
            Personne joueur[NOMBRE]={"","",0,0};
            printf("Vous vous appelez %s %s\n", joueur[n].prenom, joueur[n].nom);
        }

        return 0;

    }


    Et aussi mon "main.h"
    typedef struct Personne Personne;
    struct Personne
    {
        char nom[100];
        char prenom[100];
        char adresse[1000];
        long age;
        int garcon; // Booléen : 1 = garçon, 0 = fille
    };
    #define NOMBRE 2


    Voilà, le programme démarre bien mais mes valeurs ne s'enregistrent pas comme le confirme mon "printf" à la fin...
    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2007 à 13:00:59

      Voila la petite correction (scanf est fortement déconseillé , il vaut mieux utiliser fgets)


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

      int main(void)/* tu les utilise pas */
      {
          Personne joueur[NOMBRE];/* on déclare NOMBRE joueurs */


          int n;/* pourquoi utiliser un long pour ca ? */
          for (n = 0; n < NOMBRE; n++) {
              printf("Quel est votre nom ? ");
              scanf("%s", joueur[n].nom); /* nom equivalent a &nom[0] */
              printf("Votre prenom ? ");
              scanf("%s", joueur[n].prenom);
              printf("\n");
          }
          for (n = 0; n < NOMBRE; n++) {
              printf("Vous vous appelez %s %s\n", joueur[n].prenom,
                     joueur[n].nom);
          }

          return 0;

      • Partager sur Facebook
      • Partager sur Twitter
        18 mai 2007 à 14:32:20

        Cela n'a rien solutionné, le problème est toujours le même !!
        • Partager sur Facebook
        • Partager sur Twitter
          18 mai 2007 à 14:36:19

                 
          scanf("%s", &joueur[n].nom);
          scanf("%s", &joueur[n].prenom);

          la variable nom et prenom sont de type char. Et comme tu le sais, un tableau de char n'est rien d'autre qu'un pointeur. Donc tu dois enlever " & " .
                 
          scanf("%s", joueur[n].nom);
          scanf("%s", joueur[n].prenom);
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2007 à 15:56:29

            Salut,

            @ garulfoUnix : euh, c'est exactement ce que disait la correction de scriptoff...

            @ lorenzo11 : tu es sûr d'avoir bien appliqué cette correction ? Chez moi, elle fonctionne très bien. Quel problème rencontres-tu exactement ?

            Le seul problème qui se pose, c'est si l'utilisateur essaie de saisir des noms comportant des espaces. C'est le comportement normal de scanf(), que tu devrais (comme te le conseille scriptoff) remplacer par fgets()).
            • Partager sur Facebook
            • Partager sur Twitter
              18 mai 2007 à 16:38:30

              Désolé, étant un débutant, je ne connaissait pas fgets()
              C'est bon, j'ai solutionné le problème...juste un petit "&" à un moment, rien de grave.
              Merci pour votre aide !
              • Partager sur Facebook
              • Partager sur Twitter

              Problème avec une structure

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown