scanf在C中导致无限循环

时间:2015-09-29 16:53:23

标签: c loops scanf infinite-loop

我对C比较陌生,但我已经编程了几年了。

我正在为大学课程编写一个程序,我很困惑为什么没有调用下面的scanf函数,导致无限循环。

我已经尝试将我的scanf放在函数外部,调用它两次,一次从内部,一次从外面,以及其他几种方式。我在网上看到fflush可能会有所帮助,但它没有

有什么建议吗?

// store starting variables
int players;

// print title

printf("*------------------------------------*\n");
printf("|                                    |\n");
printf("|                Wheel               |\n");
printf("|                 of                 |\n");
printf("|               Fortune              |\n");
printf("|                                    |\n");
printf("*------------------------------------*\n");
printf("\n\nHow many players are there?: ");

while(scanf("%d", &players) != 1 && players >= 0) {
    printf("That isn't a valid number of players. Try again: ");
    fflush(stdin);
}

编辑刚刚实现我忘记了提示。输入实际数字时,此程序可以正常工作。我想让它安全,如果用户输入的内容不是字符串,它不会导致程序无限循环。

2 个答案:

答案 0 :(得分:2)

使用fgets将输入检索为字符串,使用sscanf将其转换为数字。这样做可以防止转换中的错误阻止从stdin读取。您可以打印scanf返回码和玩家的值,以查看您实际收到的内容。您还应检查文件的结尾,这也会导致无限循环,因为EOF将不再有任何输入。

答案 1 :(得分:2)

可能非数字输入位于ImageView。 OP的代码不会消耗它。结果:无限循环。

最好使用stdin

OP确定使用fgets(),测试其输出并根据需要使用非数字输入。

[编辑]每@Dmitri更正

scanf()