无法突破循环

时间:2016-10-19 03:00:36

标签: c

我不知道为什么我的代码不循环。我的目的是让用户输入正确的数字(1),否则代码将一直要求用户输入一个数字,直到用户输入“1”。运行我的代码后,如果用户输入的数字不正确,我不知道为什么我的代码不会要求用户继续输入数字。这是我的代码。

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int answer =0;
   for( ; ; )
   {
      printf("please enter the password ");
      scanf("%d",&answer);
      if(answer == 1)
         printf("correct");
         break;
   }

}

2 个答案:

答案 0 :(得分:2)

你在for循环中没有做你正在做的事情。没有大括号,if语句只会覆盖一个语句,所以无论if语句中的条件是真还是假,你都会遇到中断。

这是您的代码现在正在做的事情:

for( ; ; )
{
    printf("please enter the password ");
    scanf("%d",&answer);
    if(answer == 1)
    {
        printf("correct");
    }
    break;
}

你真正想要的是:

for( ; ; )
{
    printf("please enter the password ");
    scanf("%d",&answer);
    if(answer == 1)
    {
        printf("correct");
        break;
    }

}

因此,即使看起来,就像代码中的if处理两个语句一样,但事实并非如此。甚至有一个着名的例子就是这样的bug在Apple's goto fail中投入生产。需要注意的是,为什么有些编码样式总是需要括号ifs,if ifs和elses,即使它只是一个语句。

答案 1 :(得分:0)

您忘了添加其他大括号:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int answer = 0;
    while (answer != 0)
    {
        printf("please enter the password ");
        scanf("%d",&answer);
        if(answer == 1) {
            printf("correct");
            break;
        }
    }
}