【发布时间】:2014-02-07 15:20:41
【问题描述】:
如果在这段代码中输入了一个或多个字符,我将如何清除缓冲区。
int x = 1;
float grade = 0.0;
do
{
printf ("Enter a grade for quiz %d: ", x);
scanf ("%f", grade);
if (grade >= 1 && grade <= 10) break;
printf ("Entry not valid. Please try again\n");
} while (1);
我的导师坚持我们使用 fflush(stdin)。我知道这行不通,所以我打电话给他。我还有什么其他方法可以验证是否输入了数字。
【问题讨论】:
-
您可以简单地使用 getline 方法读入,然后自己解析字符串以确保它是只有一个小数点的数字。验证后,您将转换为实际的数字类型,然后根据需要进行处理。
-
为什么 fflush 不起作用?我用它,它很棒!我猜你用错了。
-
user689 如何正确使用 fflush?我在很多地方都放入了fflush(stdout),但是我的代码继续进入无限循环。
-
@user3284399 你应该做
fflush(stdin),而不是fflush(stdout)。您的代码中也有错误,在scanf()调用中应该是&grade而不是grade。
标签: c while-loop do-while fflush