私は選択可能なメニューオプションを持つシンプルなC++メニューを持っています。ユーザーが有効なint
以外のもの、たとえばchar
またはdouble
を入力すると、プログラムは無限ループに入ります。私のコードは以下の通りです。C++ユーザが無効な整数を入力した場合に無限に固まるメニュー
#include <iostream>
using namespace std;
int main()
{
int selection;
do {
cout << "1) Update inventory" << endl;
cout << "2) Sell items" << endl;
cout << "3) List inventory" << endl;
cout << "4) Quit" << endl;
cout << "Please select an option: ";
cin >> selection;
}
while (selection != 4);
return 0;
}
なぜ無効な応答が無限ループを引き起こし、どのように防止できますか?
cin.clear();
cin.ignore();
これはバッファをクリアし、入力を取ることを可能にする。これらの2行は
cin >> selection;
配置する前
'if(!cin){/ * handle error * /}'のようにストリームの正当性をチェックしたいとします。 [なぜループ状態の中のiostream :: eofが間違っていると考えられるのですか?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)も参照してください。 – jaggedSpire