printf("What do you do?\n1. Walk Away.\n2. Jump.\n3. Open Door.\n\n");
scanf("%d",&Choice);
printf("\n\n\n");
while(4<=Choice,Choice<=0);
{
printf("That is not a choice.\n");
printf("What do you do?\n1. Walk Away.\n2. Jump.\n3. Open Door.\n\n");
scanf("%d",&Choice);
printf("\n\n\n");
}
所以这是我的计划。它可以工作,但我想要做的是重复,直到输入1,2或3的答案。但无论答案是什么,它都会通过while循环然后继续,无论下一个选择。 (另外,我确实声明了“选择”;我只是不想展示整个节目。)
答案 0 :(得分:6)
您的代码中存在两个问题。你的while循环表达式不正确。逗号不会按照您的想法执行操作:在C / C ++中,逗号执行左侧表达式并计算为右侧表达式,这意味着在您的情况下,您只检查第二个条件。你可能想要:
while(4<=Choice || Choice<=0)
||
是OR运算符,如果它周围的任何一个表达式为真,则返回true。
其次,在while循环结束时有一个错误的分号:
while(4<=Choice,Choice<=0); //<-- this should not be here
这标志着循环的结束,这意味着您的代码被解析为:
while(4<=Choice,Choice<=0); //loop body is empty
{
//and we have a random unnamed block following it
}
删除分号,你的while循环应该正确执行。
答案 1 :(得分:3)
C和C ++有一个逗号运算符,它具有所有运算符的最低优先级。它计算左操作数并抛出结果,然后计算右操作数。因此,您的while
条件相当于:
while (Choice <= 0)
你也有一个错误,因为在条件之后会有一个分号,如果Choice
不是严格正数,那么会产生一个无限循环(因为循环中的任何内容都不会改变Choice
的值)
你打算写的是:
while (Choice >= 4 || Choice <= 0)
{
...
}
答案 2 :(得分:2)
逗号运算符,
不测试这两个条件,它只返回两者中的第二个。所以你的while
循环相当于:
while(Choice<=0) ;
并且由于语句后面有;
,所以如果满足条件,它实际上是无限循环。好的,你没有选择-1。