Partage
  • Partager sur Facebook
  • Partager sur Twitter

cherchez l'erreur

qu'est ce qui bug dans ce programme?

Sujet résolu
    18 septembre 2018 à 15:58:15

    Bonjour,

    voici le programme que j'ai écrit:

    #include <ansi_c.h>
    #include <cvirte.h>
    #include "e:\Documents\Cours\NST104\cours c\Les structures.h"



    int main (int argc, char *argv[])
    {          

        InfosJoueur joueur1, joueur2;

        printf("Veuillez renseigner votre nom\n");
               scanf("%s",joueur1.nom);

        printf("Veuillez renseigner votre prenom\n");
               scanf("%s",joueur1.prenom);

        printf("Veuillez renseigner votre age\n");
        scanf("%d",&joueur1.age);

        printf("Veuillez renseigner votre sexe:F ou M?\n");
        scanf("%c",&joueur1.sexe);

        printf("Vous vous appellez %s %s, vous avez %d ans ", joueur1.nom, joueur1.prenom, joueur1.age);

        if (joueur1.sexe ='F')
        {
            printf("et vous etes une femme\n");
        }
        else if (joueur1.sexe ='M')
        {
          printf("et vous etes un homme\n");
        }

        else                                       
        {
            printf("et j'ai pas compris si vous etes une femme ou un homme\n");
        }




        return 0;
    }

    et voici le dossier .h où j'ai mis ma structure:

        typedef struct InfosJoueur InfosJoueur;
        struct InfosJoueur
        {
            char nom[50] , prenom [50];
            char sexe;
            int age;

        };

    Voici mon problème,

    Quand je lance mon programme tout se passe bien sauf que la partie: printf("Veuillez renseigner votre sexe:F ou M?\n");
        scanf("%c",&joueur1.sexe); ne s’exécute tout simplement pas.

    Du coup la dernière partie avec la condition if ne s’exécute pas non plus.

    Je ne comprends pas pourquoi et j'en ai un peu ras le bol de faire des noeuds dans ma tête du coup, si jamais un bonne âme passe par là et qu'elle veut bien me dire ce qui bug, je lui en serais éternellement reconnaissant.



    • Partager sur Facebook
    • Partager sur Twitter
      18 septembre 2018 à 16:30:12

      Yo!

      C'est une histoire de buffer (si tu sais lire l'anglais)

      Quand tu appuies sur "Entrée", c'est considéré comme un caractère. Avec les int, les caractères genre espaces et tout sont automatiquement "manger", mais pas dans le cas du %c.
      Voilà voilà. Une des méthodes (il me semble) est de mettre un espace devant le %c, donc écrire " %c"

      • Partager sur Facebook
      • Partager sur Twitter

      « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
      D. Mendeleïev

        19 septembre 2018 à 10:25:11

        Merci KirbX,

        Effectivement ça fonctionne.

        Parcontre j'ai un autre souci, c'est que dans la partie conditions, quelque soit la valeur que je mette pour le sexe ça m'imprime printf("et vous etes une femme\n");

        Pourtant normalement il devrait me mettre "vous êtes un homme" dans le cas ou je mets un M.

        • Partager sur Facebook
        • Partager sur Twitter
          19 septembre 2018 à 10:31:41

          Oui, parcequ'une comparaison c'est "==" et pas "="
          • Partager sur Facebook
          • Partager sur Twitter

          « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
          D. Mendeleïev

            19 septembre 2018 à 10:42:37

            D'ailleurs j'ai fait tourner mon programme en mode debug en vérifiant les valeurs que prend ma variable à chaque étape.

            Ce que j'observe c'est que:

            printf("Veuillez renseigner votre sexe:F ou M?\n"); à cette etape ma variable à une valeur random (dans mon cas elle valait 0)


                scanf("%c",&joueur1.sexe); à cette étape quand je rentre M et appuie sur enter elle prend bien la valeur 77 correspondant au M.


            if (joueur1.sexe ='F') c'est là que ça part en vrille, l'ordinateur donne la valeur 70 à ma variable (correspondant au F). Donc l'impression que j'ai c'est qu'il prend ma condition pour une instruction. Pourtant je suis bien dans une condition. Je comprends pas pourquoi il me fait ça.


            Bon,

            J'ai trouvé la réponse, il fallait mettre == et pas juste =.

            Comme quoi en posant bien le problème par écrit à tête reposé ça aide.

            Merci en tout cas de ton aide tu m'as bien débloqué la situation.


            -
            Edité par IsaPatchouly 19 septembre 2018 à 10:49:00

            • Partager sur Facebook
            • Partager sur Twitter
              19 septembre 2018 à 11:30:49

              Je t'avais répondu entre tes 2 messages ;)
              Mais tant mieux si t'as réussi à trouver seul :)
              • Partager sur Facebook
              • Partager sur Twitter

              « Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
              D. Mendeleïev

              cherchez l'erreur

              × 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