Warum würden wir cin.clear () und cin.ignore () nach dem Lesen der Eingabe aufrufen?
Google Code University C++ tutorial verwendet, um dieses-code:
//Description: Illustrate the use of cin to get input
//and how to recover from errors.
#include <iostream>
using namespace std;
int main()
{
int input_var = 0;
//Enter the do while loop and stay there until either
//a non-numeric is entered, or -1 is entered. Note that
//cin will accept any integer, 4, 40, 400, etc.
do {
cout << "Enter a number (-1 = quit): ";
//The following line accepts input from the keyboard into
//variable input_var.
//cin returns false if an input operation fails, that is, if
//something other than an int (the type of input_var) is entered.
if (!(cin >> input_var)) {
cout << "Please enter numbers only." << endl;
cin.clear();
cin.ignore(10000,'\n');
}
if (input_var != -1) {
cout << "You entered " << input_var << endl;
}
}
while (input_var != -1);
cout << "All done." << endl;
return 0;
}
Was ist die Bedeutung des cin.clear()
und cin.ignore()
? Warum sind die 10000
und \n
Parameter notwendig?
InformationsquelleAutor der Frage JacKeown | 2011-02-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
cin.clear()
löscht das error-flag aufcin
(so dass die künftigen I/O-Operationen funktionieren nicht richtig), und danncin.ignore(10000, '\n')
springt zum nächsten newline (ignorieren alles andere auf der gleichen Linie wie die nicht-Zahl, so dass es nicht zu einem anderen parse-Fehler). Es wird nur das überspringen von bis zu 10000 Zeichen, so wird der code angenommen, der Benutzer wird jedoch nicht in eine sehr lange, ungültige Zeile.InformationsquelleAutor der Antwort Jeremiah Willcock
Geben Sie die
Anweisung, wenn ein Fehler Auftritt, wenn die Einnahme der Eingabe von cin. Wenn ein Fehler Auftritt, dann wird ein Fehler-flag gesetzt und in Zukunft versucht, input zu erhalten, schlagen fehl. Das ist, warum Sie benötigen,
um loszuwerden, das error-flag. Auch der Eingang, der konnte nicht sitzen, was ich davon ausgehen ist eine Art Puffer. Wenn Sie versuchen, eine Eingabe wieder, es Lesen die gleichen Eingabe im Puffer und es wird wieder scheitern. Das ist, warum Sie benötigen,
Dauert es einige 10000 Zeichen aus dem Puffer, sondern Stoppt, wenn es auf ein newline (\n). Die 10000 ist nur ein generischer großen Wert.
InformationsquelleAutor der Antwort quasiverse
verwenden
cin.ignore(1000,'\n')
klar alle chars mit der vorherigencin.get()
im Puffer und es wird entscheiden, zu stoppen, wenn Sie treffen '\n' oder1000 chars
ersten.InformationsquelleAutor der Antwort Phy Lieng