2011-12-23 7 views
0

ユーザーから整数を取得しようとしています。私はcin.ignoreを使用して、入力がintであることを確認しています。しかし、intでなければ、プログラムは無限ループに入ります。入力を受け取り、C++でint型かどうかを調べた後に無限ループが発生する

int steps = 0; 
    while (steps<2 || steps>100) 
    { 
     char tmp[1000]; 
     cout << "Zadejte pocet cyklu: "; 


     cin >> steps; 
     cin.ignore(numeric_limits<int>::max(), '\n'); 
     if (!cin || cin.gcount() != 1) 
     { 
      cin.getline(tmp,1000); 
      steps = 0; 
     } 
    } 
+0

100より大きい値または2より小さい値を入力すると、無限ループにつながる可能性がある場所では、ステップ変数を増減させていないようです。 – lfxgroove

+1

翻訳:「ステップ数を入力してください」 – Phonon

+0

ああ、しなかった知っている:Pありがとう! – lfxgroove

答えて

2

あなたがcin >> stepsを行う際に、入力ストリームは、整数が含まれていない場合は、ストリームは、明示的に クリア(cin.clear())でなければならないエラー状態に入ります。これまでは、エラー状態が残り、 の入力をさらに試みると、no-opsとして扱われます。

+0

ありがとう!それはそれを働かせる:) – patokun

関連する問題