シンプルな学校プロジェクトで作業していましたが、私はwhileループを使用してユーザー入力の検証に関して小さな問題に遭遇しました。非整数が入力されるとwhileループが奇妙に変わる入力について
cout << "How much woud you like to bet?[100, 300, 500]" << endl;
cin >> int_input;
if (cin.fail()){
int_input = 0;
}
//Validate check
while(int_input!=100 && int_input!=300 && int_input!=500){
cout << "Please enter a valid bet [100, 300, 500]" << endl;
cin >> int_input;
if (cin.fail()){
int_input = 0;
}
}
問題が発生するとループは、新たな入力要求をスキップし、何度も繰り返しCOUTのMSGを吐き終わる:次のコードは、そうするために使用されます。私は非整数は、whileループのために常にtrueを返すと仮定しますが、プログラムは依然としてユーザ入力を求めなければなりません。
cin.failは最近追加されたもので、コードをそのままそのまま残していますが、問題が解決しないため、必要ない場合もあります。
cinをリセットする必要があります。あなたはintを読んで、それに悪いデータを与え、ストリームをブロックしない悪い状態に置くように言った。 – Carcigenicate
Fwiw、あなたがクリアしても、あなたはまだ悪いデータをスキップする必要があります、またはあなたはどこにいたのでしょう。 – WhozCraig
短い答え: 'cin >>'が悪いので、特にユーザー入力のためには使用しないでください。 'std :: getline'ははるかに優れた動作をします。 – melpomene