2010-03-16 5 views
4

Cela semble bizarre:des questions cin C++

int main(int argc, char* argv[]) { 

    cout << "function main() .." << '\n'; 

    char ch = 0; 
    double number_value=1.1; 

    cin >> ch; 
    cin.putback(ch); 

    cin >> number_value; 
    cout << "1 .. " << " " << cin.good() << " " << number_value << '\n'; 
    cin >> number_value; 
    cout << "2 .. " << " " << cin.good() << " " << number_value << '\n'; 

    return 0; 

} 

Si je entrez les données suivantes:

7a 1 

Je reçois le texte suivant:

fonction main()

..

7a 1 
1 .. 1 7 
2 .. 0 0 

Je comprends le:

1 .. 1 7 

mais pourquoi la variable NUMBER_VALUE est 0. cin.good() montre l'échec donc rien aurait lu et la valeur NUMBER_VALUE de la mission précédente demeurerait. J'attends la valeur de 7.

+0

Vous pouvez utiliser std :: boolalpha pour transformer ces 1 et 0 en vrai et faux. –

+1

Notez que 'cin.good()' n'est pas la même chose que 'bool (cin)', et vous devriez préférer ce dernier lors de la vérification du succès de l'extraction. L'idiome commun de 'if (cin >> var)' fonctionne de cette façon aussi. –

+0

Quel compilateur utilisez-vous? –

Répondre

2

C'est ce que j'attendrais aussi. Avec les compilateurs j'ai à portée de main, la sortie ressemble à ceci:

function main() .. 
7a 
1 .. 1 7 
2 .. 0 7 

Vous avez sans doute découvert un bug dans la bibliothèque standard de votre compilateur.

+0

deuxième sortie qui avec MinGW ... fonction main() \ n 7a 1 \ n 1 .. 1 7 \ n 2 .. 0 7 \ n –

+0

ne pas changer la valeur est requise: 22.2.2.1.2/1 "Si une erreur survient, val est inchangé, sinon il est mis à la valeur résultante." –