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 :

[istream] comportement de cin lors d'un failbit


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut [istream] comportement de cin lors d'un failbit
    Bonjour à tous,
    j'ai le code suivant:

    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
    #include <string>
    #include <vector>
    #include <iostream>
     
    using namespace std;
     
    istream& read_hw(istream& in, vector<double>& hw)
    {
        if (in)
        {
            hw.clear();
            double x;
            while (in >> x)
                hw.push_back(x);
            in.clear();
        }
        return in;
    }
     
    void test(istream& in, char c)
    {
        if (in)
        {
            cout << "good " << c << endl;
        }
        else
        {
            cout << "bad " << c << endl;
        }
    }
     
    int main() {
        vector<double> homework;
        cout << "lecture vecteur" << endl;
        test(read_hw(cin,homework),'1');
        test(cin,'2');
        cout << "lecture double" << endl;
        double xy;
        cin >> xy;
        test(cin,'3');
        return 0;
    }
    si j'entre 12[return], 13[return] et ensuite [Ctrl D] lors du premier input, puis j'entre 3.14[return] pour le deuxième, alors j'ai cette sortie:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lecture vecteur
    12
    13
    good 1
    good 2
    lecture double
    3.14
    good 3
    par contre si je fait 12[return], 13[return] et m[return], le deuxième input ne semble pas passer, et j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    lecture vecteur
    12
    13
    m
    good 1
    good 2
    lecture double
    bad 3
    je ne comprend pas ce qu'il se passe :/ lors du deuxième run, le statut erreur de cin est à failbit lorsque j'entre m[return], mais le in.clear() à la fin de read_hw n'est-il pas censé remettre le statut erreur à 0? pourquoui à l'exécution l'instruction cin >> xy ne passe pas?

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2003
    Messages
    5 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : août 2003
    Messages : 5 273
    Points : 10 831
    Points
    10 831
    Par défaut
    En espérant que mon post passe cette fois.
    C'est parce que le buffer n'est pas purgé. La réponse est dans la FAQ.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    6 728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 6 728
    Points : 30 676
    Points
    30 676
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par tiresias54 Voir le message
    mais le in.clear() à la fin de read_hw n'est-il pas censé remettre le statut erreur à 0? pourquoui à l'exécution l'instruction cin >> xy ne passe pas?
    http://cpp.developpez.com/faq/cpp/?p...isies-avec-cin
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre actif
    Profil pro
    ingénieur
    Inscrit en
    novembre 2011
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur

    Informations forums :
    Inscription : novembre 2011
    Messages : 165
    Points : 259
    Points
    259
    Par défaut
    merci

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

Discussions similaires

  1. [2.x] Modifier le comportement par défaut lors d'un logout
    Par DevLudo dans le forum Symfony
    Réponses: 4
    Dernier message: 07/05/2015, 12h27
  2. Réponses: 4
    Dernier message: 13/04/2011, 11h40
  3. istream surcharge de l'opérateur cin pour un char*
    Par highman dans le forum SL & STL
    Réponses: 2
    Dernier message: 15/03/2007, 18h16
  4. Réponses: 6
    Dernier message: 19/06/2006, 09h38
  5. Comportement non désiré lors de la selection d'un repertoire
    Par Sunchaser dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 26/02/2006, 17h51

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