【发布时间】:2017-02-19 23:59:51
【问题描述】:
此任务的要求如下:
- 从标准输入读取浮点值,每个值由换行符分隔,并以 EOF 终止。
- 输入值的范围是 [-100,000 到 +100,000]。
- 输入将包含至少一个浮点值。
- 输入可能包含空行:这些应该被忽略。
- 除了可能的空行之外,输入的其他方面都是格式正确的。
在EOF,输出:
- 看到的最小值
- 看到的最大值
- 看到的所有值的算术平均值
全部精确到小数点后两位。 输出值必须由一个空格字符分隔,后跟一个换行符。
例子:
输入:
7
5.6
6
输出:
5.60 7.00 6.20
输入:
11
输出:
11.00 11.00 11.00
在我的代码中,当我输入 7、5.6 和 6 时,我的输出是 5.60 7.00 5.77。 我知道问题出在哪里,但不知道如何解决。我的总变量说它在 EOF 的值是 17.322826,这绝对是不正确的。
#include <stdio.h>
int main() {
int i = 0;
float big = 0;
float small = 1000000;
float total;
float div = 0;
while (i == 0) {
float a = 0;
float flag = scanf("%f", &a);
if (flag == EOF) {
printf("%.2f %.2f %.2f %f %f\n", small, big, total / div, total, div);
break;
}
if (a > big) {
big = a;
}
if (a < small) {
small = a;
}
div++;
total = total + a;
}
return 0;
}
【问题讨论】:
-
首先:阅读您使用的函数的文档!
scanf返回int,而不是float。 -
您好,您确定这是导致问题的原因吗?每次设置它时,我都会让它打印到终端“a”的值,并显示正确的值。我相信错误来自浮点值的添加。我每次运行的“总”变量,具有相同的输入,每次都有不同的输出。我将“flag”声明为 int 并且没有变化。
-
我并没有说这是导致问题的原因,但这将是使用正确类型的开始,您必须阅读文档。
EOF并不是报告问题的唯一值,这在文档中也很清楚。
标签: c floating-point