1
私は次のコードにいくつか問題があります。私はXcode(OS X)で使っています。どのように入力リセットSTDへ使用時にstd :: cinをリセットする方法は?
[そのコードの私の最初の試みを削除]
:: CIN?私は別の値を入力しようとするが、私はstd :: cinが私の間違った値の後ではもう動作しないように見えるのでできない。ループ内で私だけ入力5つの値ここで
for (unsigned char i = 0; i < 5; i++) {
int value = 0;
std::cout << "\n>> Enter \"value\": ";
std::cin >> value;
if (std::cin.fail()) {
std::cin.clear();
std::cin.ignore();
std::cout << "Error: It's not integer value!\n";
} else {
std::cout << "The value format is ok!\n";
}
std::cout << "value = " << value << std::endl;
}
:私はこのコードを使用して、私の2回目の試行で
UPD2 。毎回私は間違ってチェックします。間違った値( "asdf")を設定すると、std :: cinは狂ってしまい、もう動作しません。
が>> Enter "value": 4
The value format is ok!
value = 4
>> Enter "value": 234
The value format is ok!
value = 234
>> Enter "value": asdfghjkl
Error: It's not integer value!
value = 0
>> Enter "value": Error: It's not integer value!
value = 0
>> Enter "value": Error: It's not integer value!
value = 0
234
234
78
345
657
345
dsf
f
回答が@Galik –
更新されます 'clear'は、ストリームのエラー状態フラグをクリアします。キャラクターとは何もしません。引数を指定しないで 'ignore'を実行すると、1文字だけが破棄されます。つまり、' 'asdf ''と入力すると4回ループして、入力をやり直す前に入力が間違っていることを示します。 'std :: cin :: ignore(std :: numeric_limits :: max()、 '\ n')'を実行して、行の終わりまで破棄する必要があります。 –
@BenjaminLindley - "std :: cin :: ignore"に問題があります。私はCLangを使用していますが、それはstd :: cin.ignoreでなければならないようですが、1つのパラメータしかありません。 – JavaRunner