我没有正确编程我的while循环

时间:2013-12-27 04:22:03

标签: c++

 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循环然后继续,无论下一个选择。 (另外,我确实声明了“选择”;我只是不想展示整个节目。)

3 个答案:

答案 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。