2016-08-06 17 views
-3

私はこのコードを持っています。これは非常に単純な間違いのように見えるかもしれませんが、私はまだそれが何であるか把握することはできません。私の問題は、 'house1'の値がwhileループを終了してswitch文に移動できないということです。たとえば、house1 = 0と入力した場合、プログラムは「無効な値、再度入力してください」と印刷しますが、無効な値を入力した後house1 = 1と入力した場合は、「無効な値です。私のミスは何だったのでしょうか?whileループでC++を終了できません

cin >> house1 ; 
while ((0 <= house1) || (house1 >= 6)) 
{ 
    cout << "Invalid value! please enter again:"; 
    cin >> house1; 
} 
switch (house1) 
{ 
case '1': 
    h1_p1 = h1_p1 - 5; 
    h2_p1 = h2_p1 + 1; 
    h3_p1 = h3_p1 + 1; 
    h4_p1 = h4_p1 + 1; 
    h5_p1 = h5_p1 + 1; 
    house_p1 = house_p1 + 1; 
    break; 
case '2': 
    h2_p1 = h2_p1 - 5; 
    h3_p1 = h3_p1 + 1; 
    h4_p1 = h4_p1 + 1; 
    h5_p1 = h5_p1 + 1; 
    house_p1 = house_p1 + 2; 
    break; 
+1

'0 <= house1'私はこれが逆転していると思います。 0は<= 1なので、もう一度尋ねます。 * also * 'case '1' 'と' case 1 'は同じものではありません。あなたのwhileループ条件は整数値1をチェックしていますが、case文が*文字* 1の整数値をチェックしています。 – Borgleader

+0

'while'文の条件を注意深く読んでください。 'house1'が0に等しいとき、何をしますか? (また、そのステートメントの2つの比較のまわりの括弧の2つのセットが冗長であることに注意してください) –

+1

'(0 <= house1)ではなく'(house1 <= 0) 'が欲しいと思います。 –

答えて

1

有効な値は1から5にする必要があります意味している場合、条件はところで

while ((house1 <= 0) || (house1 >= 6)) 
{ 
    cout << "Invalid value! please enter again:"; 
    cin >> house1; 
} 

する必要があります:あなたはhouse1のために無効な入力(cinfailbit)をチェックしていません。

1

このコードの主な問題は、この文が

while ((0 <= house1) || (house1 >= 6)) 

であるあなたが0,1,2,3,4,5,6,7,...を入力するか、(house1の値など)任意の正の整数であれば、このwhile文は、そのために正しいことを参照してください。

したがって、コントロールはwhileループに入り、負の数を入力するまでループから抜けることはありません。負の数だけを入力すると、whileステートメントの条件が満たされず、コントロールループから出てくるでしょう。

関連する問題