2016-08-06 168 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所以它会再次问你。 *还*案'1'和'案件1'不是同一件事。 while循环条件检查整数值1,但您的case语句正在检查*字符* 1的整数值。 – Borgleader

+0

仔细阅读'while'语句中的条件。当'house1'等于0时它会做什么? (另外请注意,该陈述中两个比较的括号是多余的) –

+1

我相信你想'(house1 <= 0)'而不是'(0 <= house1)'。 –

回答

1

如果你的意思是有效的值应介于15,病情应该是

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

BTW:你不是house1检查无效的输入(的cinfailbit)。

1

这段代码的主要问题是这种说法

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

看看你进入0,1,2,3,4,5,6,7,...或任意正整数(如house1的值),这个while语句是针对正确的。

因此,控制进入while循环,并且不会从循环中出来,直到输入负数...因为只有当输入负数时,while语句中的条件才会满足,并且控制会从循环中走出来。