IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

 C Discussion :

Message qui s'affiche en double dans une boucle


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 22
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 13
    Points : 7
    Points
    7
    Par défaut 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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    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 éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 564
    Points : 7 640
    Points
    7 640
    Par défaut
    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);.

Discussions similaires

  1. Comment afficher un compteur dans une boucle .
    Par HASSIOMAR dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/06/2014, 11h18
  2. Afficher des Divs dans une boucle
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/12/2009, 10h41
  3. Réponses: 11
    Dernier message: 18/02/2007, 23h20
  4. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  5. [C/C++] afficher des doubles dans une message box
    Par lalaurie40 dans le forum MFC
    Réponses: 1
    Dernier message: 24/05/2005, 14h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo