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 :

Boucle while et scanf [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut Boucle while et scanf
    Bonjour,
    j'ai un soucis avec une portion de code et je n'arrive pas a en trouver l'origine.

    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
     
    int saisie;
    int test=1;
     while (test)
    { 
    printf("Saisissez un entier entre 1 et 3\n");
    scanf("%d",&saisie);
     
     if (saisie<1 || saisie>3)
    {
    printf("votre saisie n'est pas conforme, recommencez");
    test=1;
    }
    else
    {
    test=0;
    } 
    }
    cette portion de code fonctionne normalement si la saisie utilisateur est bien un entier, mais si l'utilisateur saisie une lettre le programme boucle sans redonner la main a l'utilisateur pour saisir une nouvelle entrée. C'est comme si le programme s'auto-alimentait ??

    j'ai bien essayer en rajoutant fflush(stdin); avant le scanf mais cela ne change rien.

    je précise qu'a la compilation gcc -Wall je n'ai aucune alerte.
    une ame charitable pourrait elle m'expliquer ce qui ce passe.

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    salut
    je pense qu’un Do while fera la faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int saisie;
    int test=1;
     while (test)
    { 
    do{
    printf("Saisissez un entier entre 1 et 3\n");
    scanf("%d",&saisie);
     }
     while (saisie<1 || saisie>3);
     
     
    test=0;
     
    }

  3. #3
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    C'est pour ca que l'utilisation de scanf() est deconseillee a moins d'en connaitre tres bien les mecanismes.

    http://c.developpez.com/faq/?page=cl...EN_scanf_fgets

    Jettes-y un oeil ainsi que les articles qui sont au dessus

    [EDIT]

    Grillaid... Snif...

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par dot-_-net Voir le message
    salut
    je pense qu’un Do while fera la faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int saisie;
    int test=1;
     while (test)
    { 
    do{
    printf("Saisissez un entier entre 1 et 3\n");
    scanf("%d",&saisie);
     }
     while (saisie<1 || saisie>3);
     
     
    test=0;
     
    }
    Cela n'a rien à voir. Tu pourrais mettre un for se serait identique. Le problème est la fonction scanf.

  5. #5
    Nouveau candidat au Club
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut
    merci de vos réponses, je comprends bien ce que vous m'expliquez mais ca ne fait pas encore parti des cours que je suis pour le moment on a étudié getchar et scanf . Je suis un vrai bleu
    Je vais donc je vais me rabattre vers getchar.

    je voulais juste essayer de rajouter une gestion des erreurs à mon programme pour l'améliorer ca risque donc d'être plus compliqué que prévu.

  6. #6
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Utilise fgets. Je pense que tu ne devrais pas avoir trop de mal à l'utiliser même avec une barbe bleu

  7. #7
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    getchar c'est beug et deconseillé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    char saisie;
    int test=1;
     while (test)
    { 
    do{
    printf("Saisissez un entier entre 1 et 3\n");
    saisie=getchar();
     }
     while (saisie<'1' || saisie>'3');
     
     
    test=0;
     
    }

  8. #8
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Citation Envoyé par dot-_-net Voir le message
    getchar c'est beug et deconseillé
    Je pourrais savoir c'est quoi le bug de cette fonction ?

  9. #9
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506

Discussions similaires

  1. Scanf dans une boucle while
    Par DreakY dans le forum Débuter
    Réponses: 8
    Dernier message: 22/02/2008, 12h44
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. boucle while et post incrémentation
    Par tut dans le forum C++
    Réponses: 7
    Dernier message: 10/12/2004, 17h24
  4. [MFC] Dialog dans une boucle while
    Par oxor3 dans le forum MFC
    Réponses: 5
    Dernier message: 23/04/2004, 22h51
  5. [débutant]Documentation? boucle "while"? Session?
    Par o151181 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 19/01/2004, 15h20

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