最小值和最大值不正确

时间:2020-09-16 22:49:46

标签: c

在编程方面,我还是一个新手。简单地说,我必须通过不同的数据集运行代码。对于所有负数,我的max不正确。对于所有正数,我的最小值是错误的。我知道这是因为自该项目设置为1以来,它们最初已设置为1,但我不知道如何解决此问题。这一切都在C btw中。

#include <stdio.h>
#include <conio.h>

#define       BUFSIZE       1024

int main()
{
    int itemsread;
    double item = 1;
    //initial value so loop starts
        int howmany = 0;
    //the count
        double max = item;
    double min = item;
    char line[BUFSIZE];
    double mean;
    double sum;

    while (item != 0 && fgets(line, BUFSIZE, stdin) != NULL) {
        itemsread = sscanf(line, "%lf", &item);
        if (itemsread == 1 && item != 0) {
            howmany++;
            sum += item;
            mean = sum / howmany;

            if (item > max) {
                max = item;
            }
            if (item < min) {
                min = item;
            }
        } else {
            printf("bad input\n");
        }

    }
    printf("# items: %d\n", howmany);

    if (howmany != 0) {
        printf("sum: %f\n", sum);
        printf("Maximum: %f\n", max);
        printf("Minimum: %f\n", min);
        printf("Mean: %f\n", mean);

    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您的分钟检查已关闭:

if (item < min) {
    max = item;
}

更改为

if (item < min) {
    min = item;
}

您还应该将最小值和最大值分配给从输入中收到的第一个条目。否则,除非值<1,否则永远不会设置最小值;除非> 1,否则您就不会设置最大值。

您可以使用您的howmany值进行检查。如果在第一次递增之前为0,则在该点将min和max设置为item

此外,由于您的sum是一个运行值,因此您需要将其分配给0

double sum = 0; 

通常,未在创建时初始化值会在稍后的代码中引起“乐趣”。基本上,养成在创建时将所有变量初始化为值的习惯。参见RAII-https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization