最初にあなたのソースを見せてあげましょう。はcin.clear()とcin.ignore()の間にシーケンスが必要ですか?
#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;
}
まあ、このコードは問題なく実行できます。しかし、私がcin.clear()とcin.ignore()の間を入れ替え、文字(整数ではない)を入力すると、無限ループに突き当たります。
#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;
}
私は順序がcin.clear間neccesaryあるだろう(次のコードを参照してください)()とcin.ignore()。 もしそうなら、なぜそれがシーケンスを必要としているのか知りたいです。
私の質問を読むためのThx。私はあなたの返事にとても感謝しています。 Inarticulate Writingにごめんなさい。
わかりました。今私は理由を知っている。 Thx!cin.ignail(numeric_limits :: max()、 '\ n')はcin.failbitがすでに設定されているとうまくいきません。 –
@ChingChangeatthebaby正解ですが結局は入力機能でもあります。 –