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 :

petit probleme avec while


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 6
    Points : 8
    Points
    8
    Par défaut petit probleme avec while
    bonjour les informaticiens;
    j'ai cree une enumeration couleur, et je veux demander a l'utilisateur de taper un nombre et lui donner la reponse correspondanre.Apres lui demander s'il veut continuer.
    le probleme c'est qu'il me donne pas a taper, et qu'il m'affiche le message du choix
    voici le code
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #include<stdio.h>
    #include<stdlib.h>
    typedef enum
    {
        rouge,
        jaune,
        vert
    }couleur;
     
     
    main()
    {
        char again;
        couleur c;
     
     
            do
        {
     
        printf("--MENU--\n0-rouge\n1-jaune\n2-vert\n");
            scanf("%d",&c);
            switch(c)
            {
                case 0 : printf("STOP"); break;
                case 1 : printf("ATTENTION");break;
                case 2 : printf("GO");break;
                default : printf("choix invalide");
            }
     
     
            printf("\ntapez n'importe quelle touche pour continuer ou n pour sortir");
            scanf("%c",&again);
        }while (again != 'n');
        return 0;
    }
    merci

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    1- lorsque tu fais le scanf("%d",&c) , il lit la valeur numérique mais laisse dans le buffer d'entrée le reste de la ligne soit au minimum le '\n' qui a terminé la lecture.
    Lorsque tu fais le scanf("%c",&again) , il trouve au moins le '\n' dans le buffer, le prend, continue donc sans demander de nouvelle entrée et reboucle tout seul.
    Il faut donc vider le buffer après la lecture en "%d". Par exemple :scanf("%d%*[^\n]%*c",&c) .

    2- Sur le scanf("%d",&c) , c est de type couleur, un type entier. Mais rien ne dit que ce type entier est un int (ça peut dépendre des termes de l'énumération ou d'un choix à son goût du compilateur). Les valeurs de l'énumération (rouge, jaune, vert) sont des int, mais une variable de type couleur n'est pas forcément un int. En conclusion, il ne faut pas faire de lecture directement dans une variable de type enum.
    Par contre, on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        int c;
        scanf("%d",&c);
        switch(c)
        {
           case rouge : printf("STOP"); break;
           case jaune : printf("ATTENTION");break;
           case vert  : printf("GO");break;
           default    : printf("choix invalide");
       }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2012
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    merci beaucoup, c’était vraiment très instructif.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    3/ Lire les entrees clavier avec scanf, c'est mal. Il suffit, par exemple, que l'utilisateur rentre une lettre, et hop, plus de programme.
    http://c.developpez.com/cours/

Discussions similaires

  1. [C#] Petit problème avec un élément du FAQ
    Par matech dans le forum ASP.NET
    Réponses: 11
    Dernier message: 24/01/2008, 14h11
  2. Petit problème avec grep
    Par dug dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 11/05/2005, 15h34
  3. petit probleme avec Devil
    Par ellipse dans le forum DevIL
    Réponses: 2
    Dernier message: 01/02/2005, 18h41
  4. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  5. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19

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