Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Futur Membre du Club
    Message qui s'affiche en double dans une boucle
    Bonjour,
    mon programme affiche une sorte de menu avec plusieurs phrases indiquant quelle lettre taper pour effectuer une action spécifique sur un tableau, puis une phrase où l'utilisateur peut saisir la lettre de son choix au clavier.
    Ensuite selon le choix de l'utilisateur cela va afficher quelque chose.

    Mon problème est que je veux demander à l'utilisateur si il veut continuer à utiliser cette table donc à la fin du programme je lui demande de taper 1 si il veut continuer et donc à l'aide de while je répète le programme tant qu'à la fin il tape 1.

    Et là donc mon programme se répète mais il affiche le menu une fois sans que l'on puisse rien saisir puis il le ré-affiche une seconde fois où là on peut saisir une lettre.
    Je ne comprend pas pourquoi cela affiche une fois sans que je ne puisse rien faire..

    mon programme
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    int continuer=1;
    char choix;
     
    while(continuer==1)
    {
        ///Choisir une action
        printf("\nTaper a pour afficher le tableau");
        printf("\nTaper b pour afficher le plus grand element du tableau");
        printf("\nVotre choix  : ");
        scanf("%c",&choix);
        printf("\n\nle choix est: %c",choix);
     
    switch(choix)
        {
            case 'a':
                    ///affiche le tableau
                    break;
     
            case 'b':
                    ///affiche la valeur maximale du tableau
                    break;
     
    printf("Pour continuer taper 1 : ");
    scanf("%d",&continuer);
    }

  2. #2
    Expert éminent sénior
    C'est un classique: Quand tu tapes ton choix, tu entres non seulement le chiffre, mais aussi la touche Entrée (caractère \n). Le scanf() ne supprime pas ce caractère.
    Pour résoudre ce problème, le mieux est la saisie ligne à ligne (par exemple avec le combo fgets() puis strchr() et boucle fgetc()) puis si nécessaire tu fais un sscanf() sur la ligne saisie.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Bonjour,

    Une autre manière consiste à demander à tous les scanf de vider le \n de trop. Ça marche dans beaucoup de cas, même s'il est vrai que ça ne gère pas les cas plus complexes.
    Pour cette méthode suffit d'ajouter un espace à la fin des formats. Donc ici, ça fait :
    ligne 10 : scanf("%c ",&choix);.
    ligne 24 : scanf("%d ",&continuer);.

###raw>template_hook.ano_emploi###