【发布时间】:2015-12-27 06:26:48
【问题描述】:
我对 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);
}
编辑刚刚意识到我忘了提一些东西。当我输入一个实际数字时,这个程序可以完美运行。我想让它安全,如果用户输入的不是字符串,它不会导致程序无限循环。
【问题讨论】:
-
不要
fflush(stdin)。 -
逻辑看起来不对...你的意思是
while(scanf("%d", &players) != 1 || players <= 0) {(如果scanf()失败或没有玩家则循环)?另外,fflush(stdin)不会清除所有平台上的输入流,所以在依赖它之前确保它在你的平台上工作。
标签: c loops scanf infinite-loop