2016-12-08 1 views
2

Je l'extrait de code de code suivant:Pourquoi arrive-t-il à la variable quand cin se casse? C++

int a = 1; 
    double b = 3.14; 
    string c = "hi"; 

    cin >> a >> b >> c; 
    cout << a << " " << b << " " << c << endl; 

Si j'entre apple 11 tammy, pourquoi est-il Cout: 0 3.14 hi au lieu de: 1 3.14 hi?

Pourquoi la valeur de a change-t-elle lorsque cin est cassée?

+0

Ainsi, la « valeur initiale » est 3.14 et la « attente » est 3.13 est le résultat? Ou est-ce que cette question concerne une valeur différente? Être précis est important. – user2864740

Répondre

6

Pourquoi la valeur de a change-t-elle lorsque cin est cassé?

Ceci est le comportement attendu de std::basic_istream::operator>> depuis C++ 11; Si l'extraction échoue, la valeur sera définie sur 0.

Si l'extraction échoue, zéro est écrit en valeur et l'erreur est définie. Si l'extraction aboutit à une valeur trop grande ou trop petite pour entrer en valeur, std::numeric_limits<T>::max() ou std::numeric_limits<T>::min() est écrit et l'indicateur d'échec est activé.

Notez qu'après la définition de failbit, l'entrée suivante ne sera pas effectuée; Cela signifie que b et c resteront leurs valeurs d'origine.

BTW: Avant C++ 11, la valeur ne sera pas modifiée si l'extraction échoue.

Si l'extraction échoue (par exemple, si une lettre a été entrée où un chiffre est attendu), la valeur est laissée inchangée et l'erreur est établie.