cin.ignore bei Eingabe von falschen Zeichen
-
Kann mir jemand erklären warum ersteres funktioniert, aber letzteres nicht?
int alter; while( !(cin >> alter)) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n'); cout << "Versuchs nochmal mit einer gültigen Zahl.\n"; }int alter; while( !(cin >> alter)) { cin.clear(); cin.ignore(numeric_limits<streamsize>::max, char_traits<char>::eof()); //bei zweitem def. param lassen cout << "Versuchs nochmal mit einer gültigen Zahl.\n"; }
-
Weil Du vermutlich nicht nach end-of-file suchen willst, sondern nach end-of-line. Ersteres bedeutet nämlich Ende aller Eingaben und nicht Eingabetaste

-
Ich dachte es werden so viele Zeichen verworfen wie man im 1.Parameter angibt, oder bis das zweite zutrifft. Und ich dachte, wenn alles gelesen wird, dann steht cin auf eof, ist das nicht der Fall? Wenn nicht, wann ist cin, dann "eof"?
-
IOStreams schrieb:
Ich dachte es werden so viele Zeichen verworfen wie man im 1.Parameter angibt, oder bis das zweite zutrifft.
Ja, aber wenn du dort numeric_limits<>::max() angibst, hat der eine Weile zu lesen

Und ich dachte, wenn alles gelesen wird, dann steht cin auf eof, ist das nicht der Fall? Wenn nicht, wann ist cin, dann "eof"?
Erstens schaltet cin auf EOF, wenn das "Dateiende" erreicht ist (das passiert, wenn du STRG+C drückst) - und zweitens liegt der Wert char_traits<>::eof() außerhalb des char-Wertebereiches.