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 :

Problème de SCANF dans une boucle WHILE


Sujet :

C

  1. #1
    Membre régulier Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Points : 81
    Points
    81
    Par défaut Problème de SCANF dans une boucle WHILE
    En fait je demande dans une fonction à l'utilisateur de faire un choix et tant que sa réponse ne correspond pas aux choix possible de boucler sur la question avec un while :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    do
    			{
    			  printf("Joueur 2 choisissez la couleur d'atout svp :\n(coeur : 0, carreau : 1, trefle : 2, pique : 3)\n");
    			  scanf("%d",rep_atout);
    			  getchar();
    			  printf("%d\n",*rep_atout);
    			}
    		      while(*rep_atout!=0 || *rep_atout!=1 || *rep_atout!=2 || *rep_atout!=3);
    J'utilise un do while parce que je veux que la question soit posée au moins une fois.
    Le seul problème c'est qu'à l'exécution, cela boucle sans fin.

    Merci !
    FidoDido®

    (désolé si c'est moche comme code, je débute)
    Pensez au TAG [Résolu]

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Déjà un scanf c'est pas beau mais es-tu sûr de ton test ??, ce ne serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    do
    {
               printf("Joueur 2 choisissez la couleur d'atout svp :\n(coeur : 0, carreau : 1, trefle : 2, pique : 3)\n");
               scanf("%d",rep_atout);
               getchar();
               printf("%d\n",*rep_atout);
    }
    while(*rep_atout!=0 && *rep_atout!=1 && *rep_atout!=2 && *rep_atout!=3);
    car avec le || il y en a toujours au moins 1 qui est vrai .
    Une méthode simple pour obtenir le test c'est
    je veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *rep_atout ==0 || *rep_atout ==1 || *rep_atout == 2 || *rep_atout ==3
    Donc, je vais boucler tant que je n'aurais pas ceci donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (!(*rep_atout ==0 || *rep_atout ==1 || *rep_atout == 2 || *rep_atout ==3));
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre régulier Avatar de FidoDido®
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 101
    Points : 81
    Points
    81
    Par défaut
    Oups...
    Ah bah oui quel con !

    Merci !

    Bon donc c'est moche un scanf, mais qu'est-ce qui est plus joli, on ne m'a appris que ça pour l'instant...
    Pensez au TAG [Résolu]

  4. #4
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Alors on fait comme ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char buf[assez_grand];
    fgets(buf, sizeof(buf), stdin);
    *rep_atout= strtol(buf, NULL, 10);
    strtol est une fonction sécurisée qui fait la transformation des chaînes en entiers, il ne faut pas utiliser atoi.
    scanf est une fonction très difficile a utiliser car comme son nom l'indique elle suppose que les entrées sont formatées, or la saisie humaine est rarement formatée, (ou alors le format est des plus illogiques )
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  5. #5
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    http://xrenault.developpez.com/tutoriels/c/scanf/#L4.2

    Mais utilise fgets si tu le peux... Cela te simplifiera la vie...
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de IF dans une boucle WHILE
    Par Medoou dans le forum MATLAB
    Réponses: 14
    Dernier message: 19/07/2009, 11h25
  2. Problème .destroy() dans une boucle while !
    Par stuffy dans le forum Tkinter
    Réponses: 1
    Dernier message: 29/06/2008, 01h30
  3. Scanf dans une boucle while
    Par DreakY dans le forum Débuter
    Réponses: 8
    Dernier message: 22/02/2008, 12h44
  4. problème de recordset dans une boucle while
    Par sebac dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/06/2007, 11h47
  5. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07

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