2016-10-25 10 views
0

私は選択可能なメニューオプションを持つシンプルな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; 

配置する前

+0

'if(!cin){/ * handle error * /}'のようにストリームの正当性をチェックしたいとします。 [なぜループ状態の中のiostream :: eofが間違っていると考えられるのですか?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong)も参照してください。 – jaggedSpire

答えて

-1

+2

これは彼が求めていたものではありません。彼は無効な入力について質問しています。たとえば、数字の代わりに文字が入力された場合は – dwcanillas

+0

です。これで問題は解決します。しかし、@ jaggedSpireは正しいです。 –

関連する問題