2017-09-22 10 views
-4

こんにちはこれは、同じC++プログラムの私の2番目の質問です(これは単なる問題であれば申し訳ありません)このループは、条件が満たされていても終了します。

入力が有効かどうかを確認するためにループを使用しようとしています。しかし、このループは、入力が有効であるかどうかを尊重しているようには見えません。

int b(-1); 
check = false; 
while (b < 1 || b > 12) 
{ 
    if (check) 
     std::cout<<"Sorry try again!\nMonth: "; 
    std::cin>>b; 
    check = true; 
{ 

ユーザが1〜12の値を入力した場合は、ループを続行します。

しかし、私がプログラムを実行し、有効でない入力を入力すると、それは継続します。

Year: 2017 
Month *In number format*: 20 
Day: 

でも-1仕事と私はループが始まる前に-1として値を設定しているため、それは奇妙ではありません。

Year: 2017 
Month *In number format*: -1 
Day: 

より小さいおよび大きい文を使用していますか?

+0

を私が間違って間違っ中括弧を入れ –

+1

申し訳ありません完全なコードスニペットを提供してください。 – amgtree

+0

質問を再度更新して修正してください。 –

答えて

1

無効な入力を入力すると、ストリームのフェイルビットが設定されます。この場合、ターゲット変数(b)は変更されず、ビットをクリアしない限り、入力が何であれ、operator>>の後続のコールも失敗します。実際には、入力はストリームから全く取られないので、何度も何度もそれを再読み込みします。

必要がエラービット明確にすると、無効な入力破棄する場合は、std::inの状態を確認する必要があります

if(std::in.fail()) 
{ 
    std::in.clear(); 
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 
+0

これもありがとう – amgtree

関連する問題