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.
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;
Wenn wieder a b
ist, gibt es 0+-1218170892=-1218170892
aus (Warum ist 0+0=0
??)
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
. Ссылка
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.
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.
Tags und Links c++ error-handling cin