C 添加浮点值是不正确的

C 添加浮点值是不正确的,c,floating-point,C,Floating Point,这项任务的要求如下: 从stdin读取浮点值,每个浮点值用换行符分隔,并以EOF终止 输入值在[-100000到+100000]范围内 输入将至少包含一个浮点值 输入可能包含空行:应忽略这些空行 除了可能的空行外,输入格式良好 在EOF时,输出: 所见最小值 看到的最大值 看到的所有值的算术平均值 全部精确到小数点后两位。 输出值必须由单个空格字符分隔,后跟换行符 示例: 输入: 7 5.6 6 11 输出: 5.60 7.00 6.20 11.00 11.00 11.00 输入

这项任务的要求如下:

  • 从stdin读取浮点值,每个浮点值用换行符分隔,并以EOF终止
  • 输入值在[-100000到+100000]范围内
  • 输入将至少包含一个浮点值
  • 输入可能包含空行:应忽略这些空行
  • 除了可能的空行外,输入格式良好
在EOF时,输出:

  • 所见最小值
  • 看到的最大值
  • 看到的所有值的算术平均值
全部精确到小数点后两位。 输出值必须由单个空格字符分隔,后跟换行符

示例:

输入:

7
5.6
6
11
输出:

5.60 7.00 6.20
11.00 11.00 11.00
输入:

7
5.6
6
11
输出:

5.60 7.00 6.20
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;
}
#包括
int main(){
int i=0;
浮动大=0;
浮动小=1000000;
浮动总额;
浮动div=0;
而(i==0){
浮点数a=0;
float flag=scanf(“%f”、&a);
如果(标志==EOF){
printf(“%.2f%.2f%.2f%f%f\n”,小,大,总计/div,总计,div);
打破
}
如果(a>大){
大=a;
}
if(a
您忘记将
总计
初始化为
0

进一步说明:

  • 无限循环的经典C习惯用法是(;;){…}
  • 标志
    应定义为
    int
  • flag!=1
    而不仅仅是
    标志==EOF
    。无效输入将导致程序无限循环。实际上,您可以完全删除此变量
  • big
    初始化为
    0
    small
    初始化为
    1000000
    是不正确的:如果所有值都为负值怎么办?如果它们都很大呢
以下是更正的版本:

#include <stdio.h>

int main(void) {
    float a, big, small, total;
    int div;

    if (scanf("%f", &a) != 1)
        return 1;

    big = small = total = a;
    div = 1;
    while (scanf("%f", &a) == 1) {
        if (big < a) {
            big = a;
        }
        if (small > a) {
            small = a;
        }
        div++;
        total += a;
    }
    printf("%.2f %.2f %.2f\n", small, big, total / div);
    return 0;
}
#包括
内部主(空){
浮动a、大、小、总;
国际部;
如果(扫描频率(“%f”,&a)!=1)
返回1;
大=小=总=a;
div=1;
而(scanf(“%f”,&a)==1){
如果(大a){
小=a;
}
div++;
总数+=a;
}
printf(“%.2f%.2f%.2f\n”,小,大,总/div);
返回0;
}

首先,请阅读所使用功能的文档
scanf
返回的是
int
,而不是
float
。您好,您确定这是导致问题的原因吗?我让它打印到终端的“a”值,每次它被设置,并显示正确的值。我相信错误来自于浮点值的增加。我的每次运行的“总计”var(输入相同)每次都有不同的输出。我将“flag”声明为int,没有更改。我没有说这是导致问题的原因,但这将是使用正确类型的开始,您必须阅读文档。而
EOF
并不是报告问题的唯一值,从文档中也可以看出这一点。