【发布时间】:2014-01-28 06:05:45
【问题描述】:
注意:fflush(stdin) 不起作用。
问题:
我正在使用 scanf (inb4 depreciated) 在 while 循环中输入数字。当我输入一个时,缓冲区会用空行填充其余部分。
代码:
double input, total;
for(i=0; i<COUNT; i++){
printf("\nNumber %d: ", i+1);
scanf("%d", &input);
total += input;
}
printf("\nAverage: %f\n", total/COUNT);
输出:
Please enter 5 decimal numbers:
Number 1: 1.0
Number 2:
Number 3:
Number 4:
Number 5:
Average: 0.000000
【问题讨论】:
-
为什么在scanf中使用
%d取浮点值?使用%f。 -
从 2 到 5 输入“0”时发生了什么?
-
我没有看到 ist 还是缺少来自 COUNT 的声明?
-
像往常一样,您忘记在 scanf 格式中添加“\n”(它应该是“%f”而不是“%d”)。尝试使用“%f\n”,您应该会看到更好的结果。
-
scanf 需要在出现换行时被告知。 "\n" 允许跳过行尾并准备读取下一个值。有关详细信息,请参阅任何手册页,或在此处搜索 SO。这个问题已经被回答了大约一百万次。
标签: c math buffer flush cstdio