Von dem, was ich über noskipws
weiß, deaktiviert es das Überspringen von Leerstellen. So muss man in seinem Programm weiße Leerzeichen mit ein paar Zeichen aufnehmen, wenn sie mit noskipws
arbeiten wollen. Ich versuche, den cin
-eof
Zustand durch Drücken von Strg + D (Ctrl +Z für Windows). Aber wenn ich einen char
oder string
Eingang verwende, dann wird der Strom auf das Ende der Datei mit einer einzigen Eingabe gesetzt. Wenn ich jedoch einen anderen Datentyp verwende, muss ich die Kombination zweimal drücken. Wenn ich die noskipws
Anfrage lösche, funktioniert alles andere gut. Der folgende Code beschreibt das Problem genauer:C++: noskipws verzögert das Ende der Dateierkennung für einige Datentypen
#include <iostream>
using namespace std;
int main()
{
cin >> noskipws; //noskipws request
int number; //If this int is replaced with char then it works fine
while (!cin.bad()) {
cout << "Enter ctrl + D (ctrl + Z for windows) to set cin stream to end of file " << endl;
cin >> number;
if (cin.eof()) {
break; // Reached end of file
}
}
cout << "End of file encountered" << endl;
return 0;
}
Warum ist cin
auf diese Weise zu verhalten? Obwohl es nicht in der Lage wäre, die Eingabe in die Variable int
zu setzen, sollte es mindestens Flags zu eof
sofort festlegen, wie es die Anforderung empfängt. Warum dauert es eine zweite Eingabe, selbst nachdem der Benutzer Ctrl + Z drückt?
Könnten Sie klar sagen, was Eingang Sie bieten das unerwartete Verhalten mit diesem Code –
I drücken Sie Strg + Z in der Konsole und die Konsole erfordert einen weiteren Eingang –
Cross-Site-Duplikat zu erzeugen: [Entspricht^D (in bash) für cmd.exe?] (https://superuser.com/questions/291224/equivalent-to-d-in-bash-for-cmd-exe) –