Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau de type personnalisé(scanf() non exécutée)

Sujet résolu
    13 septembre 2018 à 22:26:49

    Je voudrais créer un tableau de 3 joueurs de type Personne (type personnalisé) pour en demander à chacun des infos personnelles (prénom, nom, age, sexe), en utilisant une boucle for (qui se répète tant que le nombre de joueurs est <=3).

    J'ai écrit pour cela le code ci-dessous, mais le problème est que l'exécutable saute l'instruction scanf() qui demande au joueur d'indiquer son sexe.

    Quelqu'un pourrait m'expliquer pourquoi cette instruction n'est pas exécutée ?

    Et merci d'avance.

    #include <stdio.h>
    #include <stdlib.h>
    int main(int argc, char *argv[])
    {
        typedef struct Personne Personne;
        struct Personne
        {
          char prenom[30];
          char nom[30];
          int age;
          char sexe;
    
        };
    
        Personne joueur[3];
        int i;
        for(i=0;i<3;i++)
        {
          i++;
          printf("\njoueur n %d \n\n",i);
          i--;
          printf("Quel est votre prenom? ");
          scanf("%s",joueur[i].prenom);
          printf("\nQuel est votre nom? ");
          scanf("%s",joueur[i].nom);
          printf("\nQuel est votre age? ");
          scanf("%d",&joueur[i].age);
          printf("\nQuel est votre sexe? ");
          scanf("%c",&joueur[i].sexe);
          printf("\n");
        }
        return 0;
    }

    • Partager sur Facebook
    • Partager sur Twitter
      14 septembre 2018 à 0:23:31

      Hello,

      Il se fait qu'après le scanf() de la ligne 27, le \n (la touche sur laquelle tu appuies pour valider ton entrée) n'étant pas un chiffre, il reste dans le buffer du clavier, et ce \n étant acceptable comme caractère pour le scanf() de la ligne 29, ce dernier scanf() a sa réponse.

      Pour éviter cela, ajoute ces lignes après ta ligne 27

      int c;
      while((c=getchar())!='\n' && c!=EOF);
       

      cela permet d'éliminer les caractères non lus du buffer clavier.

      Lignes 19 à 21: pas besoin de cette gymnastique avec i, ceci suffit: printf("Joueur %d\n",i+1);

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        14 septembre 2018 à 3:02:35

        Merci bcp edgarjacobs, ça marche bien.
        • Partager sur Facebook
        • Partager sur Twitter

        Tableau de type personnalisé(scanf() non exécutée)

        × 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