scanf导致无限循环

时间:2013-12-04 09:41:48

标签: c scanf infinite-loop

之前我遇到过这个问题但是使用其他运算符绕过它。但我认为(getche();)不能在这里使用相同的运算符。无论如何,这种方法效果很好但是如果我输入一个字母就会进入一个无限循环。

printf("Enter the number of the passenger you wish to edit.");
scanf("%d", &userchoice);

do
{
    if(userchoice <= count || userchoice <= 1)
    {
        flag = 0;
    }
    else
    {
        printf("Please enter a valid input!");
        scanf("%d", &userchoice);
        flag = 1;
    }
} while (flag == 1);

3 个答案:

答案 0 :(得分:2)

你应该看到这个答案:

https://stackoverflow.com/a/1716066/2263879

问题出在你的scanf上。

答案 1 :(得分:1)

是的,它会进入。

由于您正在检查userchoice&lt; = 1,因此将比较字母ascii值,该值始终为false,flag将始终为1

P.S:我假设在这里数是一个非常小的数字,因为你没有提供它的价值。

答案 2 :(得分:0)

你的意思是在1和count之间的userchoice,然后第一个if是不正确的。 当您想要测试介于1和计数之间时,此代码有效。

    #include <stdio.h>
#include <ctype.h>

int main(int argc, char *argv[]) {
    signed int count = 5;

    signed int flag = 1;
    signed int userchoice = 0;

    printf("Enter the number of the passenger you wish to edit:");
    scanf("%d", &userchoice);

    do {
        if(userchoice <= count && userchoice >= 1) {
            flag = 0;
        } else {
            char c = '0';
            if (scanf("%d", &userchoice) == 0) {
                    printf("Please enter a valid input!\n");
              do {
                c = getchar();
              }
              while (!isdigit(c));
              ungetc(c, stdin);
            }
        }
    } while (flag == 1);

    printf("Done!");
}

输出:

a无效,因为它不是数字,6比计数大。 3是可能的,并被接受。

Enter the number of the passenger you wish to edit:a
Please enter a valid input!
6
3
Done!