-2

我希望我的while循环在用户输入 1 或 2 时停止。如果输入了其他任何内容,那么它应该重复。我尝试在变量名前加上一个感叹号并使用等号。我尝试使用单个或运算符。

petId变量得到了正确的数字——我看到了“NSLog()狗”和“猫”的 s。尽管输入了 1 或 2,为什么循环仍然循环?

int petId;
while(petId != 1 || petId!=2)
        {
            NSLog(@"%d",petId);
            NSLog(@"Would you like to create a dog or a cat?\n1.Dog 2.Cat");
            //Scan user input
            scanf("%i",&petId);
            if(petId == 1)
            {
                NSLog(@"Dog");
            }
            else if(petId==2)
            {
                NSLog(@"Cat");
            }
            else
            {
                NSLog(@"Invalid Entry");
            }
        }
4

4 回答 4

4

好吧,你会踢自己的。

意思是||或。如果 EITHER 表达式为真:(petId != 1)OR (petId != 2),则循环将继续。

  • 如果petID == 1petID != 2是真的。
  • 如果petID == 2petID != 1是真的。
  • 如果petID == 3那么两者都是真的。

你正在寻找&&.

while (exp1 && exp2) { ...

然后只要petId不是 1 而不是 2,循环就会继续。

于 2013-01-28T00:46:35.467 回答
1

如果你的输入是 2,那么它就不是 1。

如果您的输入是 1,那么它不是 2。

因此,您的 (petId != 1 || petId!=2) 条件始终为真。

将其替换为 (petId != 1 && petId!=2) 就完成了!

于 2013-01-28T01:12:52.423 回答
0

您可能在布尔运算符中犯了一个错误:替换

while(petId != 1 || petId!=2)

while(petId != 1 && petId!=2)
于 2013-01-28T00:44:34.563 回答
0

petId != 1 || petId!=2如果petId不等于 1不等于 2,则该表达式为真- 因为它不能同时为 1 和 2,所以该表达式始终为真...

尝试petId != 1 && petId != 2

于 2013-01-28T00:45:12.003 回答