Betrachten Sie den folgenden Code:
%Vor%Also:
Die Ausnahmemaske ist ein interner Wert aller Stream-Objekte Festlegen, welche Statusflags eine Ausnahme auslösen müssen , wenn sie es sind Stellen Sie ein.
Ich habe ifstream :: eofbit NICHT gesetzt, aber zur Laufzeit erscheint folgender Fehler:
%Vor%Ich kann dieses Verhalten nicht verstehen. Ich habe versucht, in.clear () direkt vor während {} zu verwenden, aber ohne Wirkung. clear () selbst setzt goodbit , und soweit ich es verstehe, "Flags müssen eine Exception werfen" (siehe Zitat oben), aber wenn googbit gesetzt ist, verursacht es nicht um irgendwelche Ausnahmen zu werfen ...
Wenn Sie
löschen möchten %Vor%es funktioniert.
Wie funktioniert getline () in diesem Fall?
Das Problem liegt in Ihrer Eingabe-Iteration. eofbit
wird nur gesetzt, wenn der letzte Lesevorgang EOF erreicht hat, nicht wenn der nächste Lesevorgang nur EOF lesen soll. Wenn letzteres eintritt, wird failbit
gleichzeitig gesetzt. Siehe die Diskussion hier .
Wenn in Ihrem speziellen Fall die Datei mit einem Zeilenumbruch endet (wie es wahrscheinlich der Fall ist), liest% ce_de% diesen Zeilenumbruch vor und kehrt zurück. getline()
ist immer noch nicht gesetzt. Das nächste eofbit
trifft dann direkt auf EOF und gemäß seiner Dokumentation: "Wenn die Funktion keine Elemente extrahiert, ruft sie getline()
auf."