一个简单的while循环检查输入卡在无限循环中

时间:2018-03-11 21:21:55

标签: c while-loop scanf

我很确定之前有人问过,但我找不到任何答案,所以我走了。这是一行简单的代码,我无法退出while loop。如果我将||更改为&&,则无论我按什么,都会退出。谢谢你的答案。

#include <stdio.h>   
int main()
{
    int answer;

    printf("Are you sure you want to exit the program? Type in 1 for yes and 2 for no.\n");
    scanf("%d", answer);

    //This is to check that the user inputs the right number if not error message is displayed
    while(answer <1 || answer > 2)
    {
        printf("Please type in 1 to exit the program and yes and 0 to keep playing. \n");
        scanf("%d", answer);
        flushall();
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

如果你想退出1,那么你只需要检查输入是否等于它,这就是为什么我想在不等于1时扫描更多的答案。如果是,那么它将省略循环并直接返回0.

我也改变了scanf的使用方式 - 当你声明一个变量时(在你的情况下回答),系统在内存中给它一个地址。然后使用scanf从用户那里获取输入,并在获取输入后,将其写入该变量的地址,以便稍后引用时,系统将转到该地址并检索该值。

int main()
{
    int answer;

    printf("Are you sure you want to exit the program? Type in 1 for yes and 2 for no.\n");
    scanf("%d", &answer);

    //This is to check that the user inputs the right number if not error message is displayed
    while(answer != 1)
    {
        printf("Please type in 1 to exit the program and yes and 0 to keep playing. \n");
        scanf("%d", &answer);
    }
    return 0;
}

答案 1 :(得分:0)

这是误解/忘记scanf如何运作的常见情况。

int scanf ( const char * format, ... );

stdin.

读取格式化数据

它从stdin读取数据,并根据参数格式将数据存储到位置pointed中。附加参数。

附加参数should point已经分配了格式字符串中相应格式说明符指定类型的对象。

这意味着参数应为pointers

在你的情况下:

   int answer;
   scanf("%d", answer);

answer不是指针,而是int类型的变量(对象)。

要满足scanf,您必须使用指向answer的指针。

您可以使用unarymonadic operator &amp; 来提供变量的地址。

   scanf("%d", &answer);

或者您可以使用指向answer的指针:

   int answer;
   int answer_ptr = & answer; 
   scanf("%d", answer_ptr);

这也是正确的,但通常没有必要采用这种结构。

其次是:

 while(answer <1 || answer > 2)

您可能希望将其修改为

 while (answer != 1 && answer != 2) 

如果您有兴趣在while loop等于answer1时打破2