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 boucle et saisie de char


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut Problème boucle et saisie de char
    J'ai quelque soucies avec une boucle qui normalement est tout ce qui a de plus simple avec une demande de saisie d'un caractère.
    Après une séance avancer de tirage de cheveux , voici sur quoi je bloque toujours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     while(faireModif != 'o' || faireModif != 'n')
     {
                        printf("Modifier? (o/n)  ");
                        faireModif = lireCaractere();
                        printf("\n");
                        printf("%c", faireModif);
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     do
    {
                        printf("Modifier? (o/n)  ");
                        faireModif = lireCaractere();
                        printf("\n");
    } while(faireModif == 'o' || faireModif == 'n');
    ma fonction lirecaractère:
    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 lireCaractere()
    {
        fflush(stdin);
        char caractere = 0;
     
        caractere = getchar(); // On lit le premier caractère
     
        // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
        while (getchar() != '\n') ;
     
        return caractere; // On retourne le premier caractère qu'on a lu
     
    }
    Malgré que ma saisie fonctionne, on ne sort jamais de cette foutu boucle!!

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     while(faireModif != 'o' || faireModif != 'n')
     {
    « || » est un OU. Tu dis donc « si faireModif est différent de 'o' ou différent de 'n' ». Puisque c'est l'un ou l'autre, ça ne peut pas être les deux et ta formule est toujours vraie. Utilise « && » à la place.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char lireCaractere()
    {
        fflush(stdin);
    On ne peut pas vider le buffer d'entrée avec fflush(). Cette fonction sert à provoquer l'envoi immédiat des données en attente vers leur destinataire. Pas à les détruire. Comme dans le cas de stdin, le destinataire c'est toi et que les données sont déjà disponibles, il ne se passe rien.

    Malgré que ma saisie fonctionne, on ne sort jamais de cette foutu boucle!!
    « Bien que » !

    Bon courage.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    Utilise « && » à la place.
    alors pourquoi la boucle en do...while ne marche pas non plus???

    Concernant le fflush, tu as parfaitement raison mais j'ai fini par le mettre a force de debbuger bien que je sais que c'est pas potable.

    Merci pour ton aide précieuse

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    J'ai finit par trouver grace a toi merci, c'était une erreur toute connes de logique (3/4 de mes erreurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     do
                    {
                        printf("Modifier? (o/n)  ");
                        faireModif = lireCaractere();
                        printf("\n");
                        printf("%c", faireModif);
                    }while(faireModif != 'o' && faireModif != 'n');
    comme ca ca marche parfaitement!
    et pour l'histoire du fflush j'ai remplacer par une fonction viderBuffer() que j'utilisai déja:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void viderBuffer()
    {
        int c = 0;
        while(c != '\n' && c != EOF)
        {
            c = getchar();
        }
    }

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Bravo à toi, mais n'oublie pas

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Par défaut
    J'ai toujours un problème,
    la boucle précédente ne marche pas a tout les coup, apparamment elle se réexecute une deuxième fois car le caractère saisie est mal capturée. Le debugger de codeblocks mindique que dans ce cas ci faireModif vaut \n.
    D'ou cela peut provenir???

Discussions similaires

  1. Excel : problème avec la saisie d'heure
    Par an_merle dans le forum Excel
    Réponses: 1
    Dernier message: 21/02/2006, 22h26
  2. Problème avec la saisie semi-automatique d'internet explorer
    Par haltabush dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 07/02/2006, 13h23
  3. [MFC] Problème de conversion CString vers Char *
    Par Darkenshin dans le forum MFC
    Réponses: 10
    Dernier message: 02/12/2005, 14h42
  4. Programmer une boucle de saisie chaine de caractère.
    Par Spike Spiegel dans le forum C
    Réponses: 30
    Dernier message: 02/10/2005, 17h46
  5. Problème de *pointeur sur des char
    Par Spartan03 dans le forum C++
    Réponses: 2
    Dernier message: 18/09/2005, 14h20

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