(noob) schleife funktioniert nicht
-
Ok, und warum schreibt man dann in der Regel cin.ignore(cin.rdbuf()->in_avail()); ?
Ist es einfach so, dass du eine Zahl waehlst, die gross genug ist, um sicher genug freizugeben?
-
Shinja schrieb:
Ok, und warum schreibt man dann in der Regel cin.ignore(cin.rdbuf()->in_avail()); ?
Das ist auch eine Möglichkeit, aber mitunter nicht sehr portabel (hier im Forum sind schon Fälle aufgetaucht, wo in_avail() einen "falschen" Wert zurückgegeben hat). Auf der sicheren Seite bist du mit
cin.ignore(numeric_limits<streamsize>::max());
-
Vielen Dankm dann tausche ich das mal am besten jetzt immer aus.
-
CStoll schrieb:
Shinja schrieb:
Ok, und warum schreibt man dann in der Regel cin.ignore(cin.rdbuf()->in_avail()); ?
Das ist auch eine Möglichkeit, aber mitunter nicht sehr portabel (hier im Forum sind schon Fälle aufgetaucht, wo in_avail() einen "falschen" Wert zurückgegeben hat). Auf der sicheren Seite bist du mit
cin.ignore(numeric_limits<streamsize>::max());Ich weiß, das ist jetzt doof
, aber ich hab das [Zitat] nicht verstanden!
Könnte ich eine Erklärung bekommen?
-
Was hast du denn daran nicht verstanden?
-
cin.ignore( numeric_limits<streamsize>::max( ) );Wirft soviele Zeichen in cin weg ( cin.ignore( ) ) wie maximal in einem stream existieren können ( numeric_limits< streamsize >::max( ) ). Auf gut Deutsch: mit Sicherheit alle.
greetz, Swordfish
-
Ergänzend könnte man (imo: sollte man) dem ignore noch einen Delimiter mitgeben, dann kann man schön im voraus tippen oder die Eingabe reinpipen.
cin.ignore( numeric_limits<streamsize>::max( ), '\n' );
-
LordJaxom schrieb:
Ergänzend könnte man (imo: sollte man) dem ignore noch einen Delimiter mitgeben, dann kann man schön im voraus tippen oder die Eingabe reinpipen.
cin.ignore( numeric_limits<streamsize>::max( ), '\n' );Ja, sieht nett aus, bringt aber auch nichts neues - '\n' ist sowieso der Default-Wert für den zweiten Parameter von ignore().
(interessant wird dieser Parameter erst, wenn du ein anderes Zeichen als "Zeilen"ende verwenden willst)
-
CStoll schrieb:
'\n' ist sowieso der Default-Wert für den zweiten Parameter von ignore().
Nach meinen Informationen ist der Default-Delimiter bei basic_istream::ignore eof, oder verwechsel ich da was?
EDIT: '\n' war bei getline.
-
OK, Punkt für dich (nochmal nachgeguckt hat) - ich hatte irgendwo im Hinterkopf, daß ignore() auch bis zum \n liest.