我只是一个初学者,我正在尝试制作一个程序,要求输入一个数字,如果输入一个字母,它会说“这不是一个数字”并再次要求输入一个数字,直到输入一个数字。
但是,我的程序一直在使用当前代码进入无限循环。解决此问题的任何帮助将不胜感激。另外,如果没有输入任何内容,我也希望程序说“请输入一些东西”,但不知道该怎么做。谢谢。
#include <stdio.h>
int main()
{
float i;
printf("enter a number");
while(scanf("%f", &i) != 1)
{
puts("That is not a number.");
scanf("%f", &i);
}
}
最佳答案
您需要在 scanf 失败后清除来自标准输入的错误输入:
#include <stdio.h>
int main()
{
float i;
char trash[1024];
while (1)
{
printf("Please enter a number: ");
fflush(stdout);
if (1 == scanf("%f", &i))
break;
/* scanf failed: clear the bad input from stdin */
if (NULL == fgets(trash, sizeof(trash), stdin)) /* NOTE: assumes 1 entry per line and no line longer than 1023 characters */
exit((fprintf(stderr, "Unexpected EOF or error!\n"), 1));
puts("That is not a number.");
}
printf("You entered: %f!\n", i);
return 0;
}
作为清除行的 fgets() 的替代方法,您可以调用 scanf("%1023s", trash),它只会吸收下一个以空格分隔的字符系列。例如,这将允许您在一行中处理多个条目,其中错误混合在一起。
关于c - 当输入不是数字时,进入无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28578356/