Was ist eine bessere Methode, cin
input zu löschen? Ich dachte cin.clear
und cin.ignore
war ein guter Weg?
Code:
%Vor%Mein Lehrer gab mir diese Antwort:
Das sagt im Grunde, dass Sie clearInput funktioniert nicht FYI: ignorieren ist NIE eine gute Idee als ein Weg loswerden von allem, was auf einem bleibt Linie
und Ihr Fehler bei diesem Test ist genau der Grund warum jetzt klar es geht richtiger Weg
Sie hat mir auch folgendes gesagt:
on ignorieren Sie müssen raten, wie viele Zeichen, die du ignorieren möchtest Sie wissen absolut Ihre Daten und es folgt einem strikten Format - wie in Excel Tabellenkalkulation, ignorieren ist wirklich gut. Wenn Sie nicht in dieser Art von Datei sind, dann benutzt du NIEMALS ignorieren. Frage, Sind deine Daten gut geformt? Wenn ja, verwenden Sie ignorieren. Wenn nicht, verwende nicht ignorieren.
Liste ALLEN Weg, um Daten zu erhalten? 1) Es gibt Extraktion & gt; & gt;
und es gibt auch ??????
bitte für mich auflisten
Die Antwort Ihres Lehrers ist etwas unklar (zumindest für mich).
In Bezug auf ignore
ist dein Lehrer im Prinzip falsch: ignore
ist das Standard-Idiom , wie man einen Stream löscht (wie von Potatocorn gezeigt, wird dies sogar im Standard erwähnt).
Es ist jedoch wichtig zu beachten, dass cin.ignore(1000)
tatsächlich eine schlechte Möglichkeit ist, dies zu tun: dies setzt nur voraus, dass es nicht mehr als 1000 Zeichen im Puffer gibt. Verwenden Sie niemals eine solche magische Zahl in ignore
.
Verwenden Sie stattdessen entweder
cin.rdbuf()->in_avail()
(d. h. die verfügbare Anzahl von Zeichen im Lesepuffer) 1) , oder verwenden Sie numeric_limits<streamsize>::max()
. 1) Leider ist in_avail
bei einigen neueren VC (?) Compilern defekt, daher ist diese Methode nicht sehr portabel.
Kopieren-Einfügen aus dem Standard,
%Vor%Effekte: Benimmt sich als unformatiert Eingabefunktion (wie beschrieben in 27.6.1.3, Absatz 1). Nach dem Aufbau eines Sentry-Objekts extrahiert Zeichen und verwirft sie. Zeichen werden bis zu einem von extrahiert Folgendes passiert:
- wenn
n != numeric_limits<streamsize>::max()
(18.2.1),n
Zeichen werden extrahiert- Ende der Datei tritt in der Eingabefolge auf (in diesem Fall die Funktion ruft
setstate(eofbit)
auf, was möglicherweise der Fall ist throwios_base::failure
(27.4.4.3));c == delim
für das nächste verfügbare Eingabezeichenc
(in diesem Fallc
ist extrahiert).
Sie haben die Zeile mit numeric_limits<>::max
kommentiert, die besser ist, aber es sieht so aus, als ob Sie nicht etwas verwenden wollten, das Sie nicht vollständig verstanden haben, was auch gut ist.
Das einzige, was jemand außer ignore
möglicherweise noch möchte, ist das nicht blockierende Verhalten, d. h. warten Sie nicht darauf, dass der Benutzer die Rückkehr drückt, wenn sich das Terminal im ungepufferten Modus befindet. Aber das wird von Iostreams, soweit ich weiß, nicht ganz unterstützt.
Tags und Links c++