2016-05-31 12 views
0

Kann mir jemand dieses C++ Verhalten erklären?Speichern der Nummer größer als INT_MAX in einem int

for (int i=0;i<3;++i){ 
    int x; 
    std::cin >> x; 
    std::cout << x << std::endl; 
} 

Wenn ich Eingabe eine Zahl größer als INT_MAX (wie 124124124124124) nur einmal, diese Ausgänge:

2147483647 
2147483647 
2147483647 

Meine beste Vermutung ist, dass es meine Eingabe erkennt eine Zahl ist, aber es schneidet, weil x passt nur bis 2147483647. Was ich nicht verstehe, ist warum, nach Eingabe dieser großen Zahl nur einmal, der Eingang "überläuft" zu den anderen Eingängen, und druckt 2147483647 dreimal, dann beendet das Programm.

+0

Der erste Lesevorgang versetzt den Stream in einen Fehlerzustand, und die nachfolgenden Lesevorgänge machen nichts. –

Antwort

5

Der Stream-Operator >> stellt fest, dass Sie nicht in dieser großen Zahl und setzt den fail Bitstrom kann und verändert nicht den Wert von x.

Das nachfolgende Lesen von diesem Eingangsstrom (cin in diesem Fall) schlägt sofort fehl, und somit bleibt der Wert x unverändert (und in diesem Fall undefiniert).

+1

Und natürlich ist der Grund, warum es den Wert dreimal wiederholt, weil 'i <3 '. Ändern Sie es in eine beliebige Zahl und es wiederholt diese Anzahl von Malen. –

+0

Ahh ich sehe! Vielen Dank – Chara

Verwandte Themen