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)

  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));

  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...

  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 )

  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...

+ 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, 12h25
  2. Problème .destroy() dans une boucle while !
    Par stuffy dans le forum Tkinter
    Réponses: 1
    Dernier message: 29/06/2008, 02h30
  3. Scanf dans une boucle while
    Par DreakY dans le forum Débuter
    Réponses: 8
    Dernier message: 22/02/2008, 13h44
  4. problème de recordset dans une boucle while
    Par sebac dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/06/2007, 12h47
  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, 19h07

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