Lassen Sie mich Ihnen zuerst meine Quelle zeigen.ist die Sequenz zwischen cin.clear() und cin.ignore() erforderlich?
#include <iostream>
#include <limits>
using namespace std;
int main() {
int n;
while (true) {
cout << "Type >> ";
cin >> n;
if (cin.fail()) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Not a number" << endl;
continue;
}
if (n % 2)
cout << "odd";
else
cout << "even";
cout << endl;
}
return 0;
}
Nun, dieser Code kann ohne Probleme ausgeführt werden. Wenn ich jedoch zwischen cin.clear() und cin.ignore() wechsle und dann character (nicht ganzzahlig) schreibe, bleibt es in der Endlosschleife hängen. (Konsultieren nächsten Code)
#include <iostream>
#include <limits>
using namespace std;
int main() {
int n;
while (true) {
cout << "Type >> ";
cin >> n;
if (cin.fail()) {
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.clear();
cout << "Not a number" << endl;
continue;
}
if (n % 2)
cout << "odd";
else
cout << "even";
cout << endl;
}
return 0;
}
Ich frage mich Sequenz zwischen cin.clear neccesary ist() und cin.ignore(). Wenn es ist, möchte ich wissen, warum es Sequenz benötigt.
Thx für meine Frage zu lesen. Ich werde für Ihre Antworten sehr dankbar sein. Entschuldigung für unartikulierte Schreiben.
Wow, ich verstehe. Jetzt weiß ich warum. Thx! Dann, cin.ignore (numeric_limits :: max(), '\ n') funktioniert nicht, wenn cin.failbit bereits gesetzt ist, oder? –
@ChingChangeatthebaby Korrekt, schließlich ist es auch eine Eingabefunktion. –