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 :

cin buffer gestion


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2006
    Messages : 286
    Par défaut cin buffer gestion
    Bonjour,
    Dans cet extrait de code il doit manquer quelque chose.
    Taper h permet l'accès au contenu entre {ligne 19...26}
    mais cin.get();ligne 27 ne bloque pas le déroulement.
    Je ne suis pas expert...:vider sw..comment?
    Que manque t-il?

    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
    36
    37
    38
    39
    40
    41
    42
     
    //essai 
    #include <iostream>
    #include <string>
    #include <fstream>
    #include <sstream>
     
    using namespace std;
    int main()
    {
     debchoix:
    cout<<"(h)iver"<<endl;
    cout<<"(f)etes"<<endl;
    cout<<"(z)sortie"<<endl;
     
    char sw;sw=getchar();
    switch(sw)
         {//sw
              case'h':
                   {//h
                        int tbul=65;
                        cout<<"      écriture du motif en ";cout<<tbul<<endl;
                        int posdeb=49;int longfin=3;string test="000";
                        cout<<" test de "<<test;cout<<"effectué en position ";
                        cout<<posdeb<<" sur "<<longfin<<" car."<<endl;
                        cout<<"<E>/ELEMENTS Hiver"<<endl;
                        cin.get();
                   break;
                   }//h
              case 'f':
                   {//f
                     cout<<"ElEments f.fixes"<<endl;
                     cin.get();
                     break;
                   }//f
              case 'z':
                    break;
              default:{cout<<"err sur touche!!"<<sw<<endl;goto debchoix;}
         }//sw 
    cout<<"------------"<<endl;                                  
    cout<<"<E>/sortie";cin.get();// c=getchar();
    }
    Avec mes remerciements.
    Sen.

  2. #2
    Membre éprouvé Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Par défaut
    Je ne suis pas expert et j'ai aperçu ton code mais d'après la question que tu poses, saches que :
    cin agit comme un buffer, donc si tu as demandé un à l'utilisateur d'entrer un caractère avant, ce même utilisateur va devoir appuyer sur Entrée pour valider,
    le caractère Entrée (un simple retour aller à la ligne '\n') se trouve donc encore dans le buffer si tu as demandé un getchar() avant.
    Et donc si tu fais un cin.get() un peu après, cin récupères le caractère '\n' correspondant à l'appui de ta touche Entrée et donc cin.get() ne bloque pas. Mets en 2 si tu souhaites que ca bloque

  3. #3
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2006
    Messages : 286
    Par défaut
    merci pour cette réponse/diagnostique.
    Mais je ne comprend pas le "un" dans "si tu as demandé un à l'utilisateur " ni le "2" dans "Mets en 2 si".C'est une allusion à quoi?Un n° de ligne?
    J'avais subodoré(aïe!) que cin contenait le précédent caractère tapé et que le contenu du 2e cin était déjà connu et donc que le code passait direct à la suite,sans arrêt sur le 2e cin.
    Ici je viens d'apprendre que cin est un buffer qui reste plein tant qu'on ne le vide pas.
    Mon message devient comment vider le buffer cin?Je modifie l'intitulé de base.
    Il faudrait donc placer un vidage de cin entre lignes 19/20 ou 20/21.
    Merci d'avance à ceux qui savent!
    Mais on avance.
    Sen.

  4. #4
    Membre éprouvé Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Par défaut
    le 'un' c'est un ajout non voulu de ma part.
    Quant au "mets-en 2", je voulais dire fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cin.get(); // Celui sert récupère le '\n' du à l'appui de la touche Entrée 
    cin.get(); // Celui est bloquant et attend une entrée au clavier
    Sinon, il existe une fonction te permettant de supprimer le dernier caractère de cin, je crois :
    http://www.cplusplus.com/reference/i.../istream/sync/

  5. #5
    Membre très actif
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2006
    Messages : 286
    Par défaut
    élégant,efficace!
    Merci pour cette réponse qui suffit à mon bonheur du moment.
    Sen.

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

Discussions similaires

  1. gestion buffer dans gtktextview
    Par coax81 dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 25/06/2007, 13h50
  2. Gestion de buffer
    Par Treuze dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 26/04/2007, 14h08
  3. gestion de buffer
    Par r0d dans le forum C++
    Réponses: 11
    Dernier message: 23/08/2006, 15h31
  4. Gestion des buffers dans une fonction
    Par JiJiJaco dans le forum Langage
    Réponses: 2
    Dernier message: 06/01/2006, 11h20
  5. Le buffer clavier avec cin, et getch()
    Par Info420 dans le forum SL & STL
    Réponses: 1
    Dernier message: 06/12/2004, 12h45

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