Was macht cin bei einem Fehler?

8
%Vor%

Wenn ich 3 4 als Eingabe eingegeben habe, ist die Ausgabe 3+4=7 , nun, es ist seltsam; Aber wenn ich a b eingabe, ist die Ausgabe 0+0=0 (Warum ist es 0 und 0?); Am verwirrendsten ist a 4 , es wird 0+0=0 (Warum nicht '0 + 4 = 4' ?????); Dann schreibe ich ein anderes prog.

%Vor%

Wenn ich a 4 eingeben, warum ist es immer noch 0+0=0 ? Sollte es nicht 0+4=4 sein?

Danke an alle warmherzigen !!

Ich schreibe prog3, um zu testen, was passiert, wenn ich nicht int a=1;int b=2 schreibe;

%Vor%

Wenn wieder a b ist, gibt es 0+-1218170892=-1218170892 aus (Warum ist 0+0=0 ??)

    
user1668903 13.09.2012, 14:41
quelle

3 Antworten

1

Wie alle istreams hat std::cin Fehlerbits. Diese Bits werden gesetzt, wenn Fehler auftreten. Zum Beispiel können Sie die Werte der Fehlerbits mit Funktionen wie good() , bad() , eof() usw. finden. Wenn Sie eine schlechte Eingabe lesen ( fail() gibt true zurück), verwenden Sie clear() zum Löschen die Fahnen. Sie werden wahrscheinlich auch ein ignore(1); benötigen, um das problematische Zeichen zu entfernen.

Weitere Informationen finden Sie im Abschnitt State functions . Ссылка

    
Drise 13.09.2012 14:42
quelle
0

std :: cin ist eine istream-Instanz und behält daher seinen Fehlerzustand bei, wenn etwas ungültiges gelesen wird.

Um es zu "heilen", müssen Sie beide seine Fahne löschen

%Vor%

und spülen Sie seinen Puffer.

%Vor%

Was überraschender ist, ist, dass es nicht 1 + 2 = 3 zurückgibt, wenn Sie ungültige Zeichen eingeben, da ich erwarten würde, dass ein fehlgeschlagener Cin-Stream keine Nebenwirkungen hat, was er zu aktualisieren versucht.

    
CashCow 13.09.2012 14:42
quelle
0

Der Wert wird bei einem Fehler gemäß C ++ 11 auf Null gesetzt: Wenn die Extraktion fehlschlägt, wird Null in den Wert geschrieben und failbit wird gesetzt.

Im Beispiel 'a 4' sind beide Werte 0, weil der Puffer nicht gelöscht / gelöscht wurde, also liest der zweite cin read immer noch den Fehler und erhält auch den Wert 0.

    
Sogger 13.09.2012 15:08
quelle

Tags und Links