我对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);
}
编辑刚刚实现我忘记了提示。输入实际数字时,此程序可以正常工作。我想让它安全,如果用户输入的内容不是字符串,它不会导致程序无限循环。
答案 0 :(得分:2)
使用fgets将输入检索为字符串,使用sscanf将其转换为数字。这样做可以防止转换中的错误阻止从stdin读取。您可以打印scanf返回码和玩家的值,以查看您实际收到的内容。您还应检查文件的结尾,这也会导致无限循环,因为EOF将不再有任何输入。
答案 1 :(得分:2)
可能非数字输入位于ImageView
。 OP的代码不会消耗它。结果:无限循环。
最好使用stdin
。
OP确定使用fgets()
,测试其输出并根据需要使用非数字输入。
[编辑]每@Dmitri更正
scanf()