Wie lösche ich den Cin-Puffer in C ++?
c++
cin
io-buffering
Dana die Gesunde
quelle
quelle
Ich würde die C ++ - Größenbeschränkungen den C-Versionen vorziehen:
quelle
cin
die erste Anweisung oben verwende und verwende, um dencin
Puffer zu leeren , werden Sie so lange zur Eingabe aufgefordert , bis ich sieEOF
durch Drückenctrl+d
eingebe.Dies war das einzige, was für mich beim Lesen von der Konsole aus funktioniert hat. In jedem anderen Fall würde es entweder unbegrenzt lesen, weil \ n fehlt, oder es würde etwas im Puffer verbleiben.
EDIT: Ich fand heraus, dass die vorherige Lösung die Dinge noch schlimmer machte. DIESES funktioniert jedoch:
quelle
Ich habe zwei Lösungen dafür gefunden.
Das erste und einfachste ist zum
std::getline()
Beispiel:... das den Eingabestream verwirft, wenn er in eine neue Zeile gelangt. Lesen Sie mehr über diese Funktion hier .
Eine andere Option, die den Stream direkt verwirft, ist diese ...
Viel Glück!
quelle
quelle
Wie wäre es mit:
quelle
Ich bevorzuge:
Es gibt ein Beispiel, in dem cin.ignore es einfach nicht schneidet, aber ich kann im Moment nicht daran denken. Es ist eine Weile her, als ich es benutzen musste (mit Mingw).
Fflush (stdin) ist jedoch gemäß dem Standard ein undefiniertes Verhalten. fflush () ist nur für Ausgabestreams gedacht. fflush (stdin) scheint nur unter Windows (zumindest mit GCC- und MS-Compilern) wie erwartet als Erweiterung des C-Standards zu funktionieren .
Wenn Sie es verwenden, ist Ihr Code also nicht portabel.
Siehe Verwenden von fflush (stdin) .
Eine Alternative finden Sie auch unter http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1 .
quelle
Eine andere mögliche (manuelle) Lösung ist
Ich kann fflush oder cin.flush () nicht mit CLion verwenden, daher war dies praktisch.
quelle
Einfachster Weg:
Es positioniert nur den cin-Zeiger am Ende des stdin-Streams und cin.clear () löscht alle Fehlerflags wie das EOF-Flag.
quelle
Folgendes sollte funktionieren:
Auf einigen Systemen ist es nicht verfügbar und dann können Sie Folgendes verwenden:
quelle
flush
Methode nur zur Ausgabe und behandelt bereits geschriebene Zeichen.basic_istream<char>' has no member named 'flush'
und dann Funktion verwenden
quelle
cin.get()
scheint es seltsamerweise automatisch zu spülen (wahrscheinlich jedoch nicht bevorzugt, da dies verwirrend und wahrscheinlich temperamentvoll ist).quelle
Es hat bei mir funktioniert. Ich habe for-Schleife mit getline () verwendet.
quelle