试图打印最小,最大和平均值。最小的打印不正确

时间:2016-02-20 05:15:53

标签: c input printf scanf

所以,我正在尝试创建一个程序,输出最小的输入,最大的输入,以及输入的平均值或平均值。到目前为止,最大值和平均值都在工作,但除非我输入低于0的值,否则最小值始终打印为“0.00”,即使最小值高于0也是如此。

#include <stdio.h>
#include <math.h>

int main (void) {

    float input;
    float mean = 0.00;
    float total = 0.00;
    float numOfInput = 0.00;
    float smallest;
    float largest;

    while (scanf ("%f", &input) != EOF && input >= -100000 && input <= 100000) {
        numOfInput++;
        total += input;
        if (input > largest)
            largest = input;
        else if (smallest > input)
            smallest = input;

    }

    mean = (total / numOfInput);
    printf ("%.2f %.2f %.2f\n", smallest, largest, mean);
}

有什么建议吗?我已经坚持了近一个小时了。正如我之前所说,当我输入一个低于0的值时,这可以正常工作,但对于高于0的任何值都不行。

非常感谢!

2 个答案:

答案 0 :(得分:2)

您的代码存在漏洞,因为1)scanf("%f",&input)!=EOF不是您检查有效input的方式(正如David C. Rankin指出的那样); 2)您没有初始化smallestlargest;严格来说,你的结果可能是不确定的。

我认为您需要的是将smallestlargest号码初始化为第一个有效input

float input; 
float mean = 0.00;
float total = 0.00;
unsigned int numOfInput = 0;  // <-- note this is `unsigned int`, not `float`
float smallest = 0; // <-- don't forget this
float largest = 0;  // <-- and this

while( scanf("%f",&input)==1 && input>= -100000 && input <= 100000 )
{
    numOfInput++;
    if( numOfInput == 1 )  // <-- Assign `smallest` and `largest` on first valid input
    {
        smallest = input;
        largest = input;
    }

    total += input; 

    if(input>largest)
        largest = input;
    else if(smallest>input)
        smallest = input;
}

答案 1 :(得分:0)

您只能使用.subscribe(res=>{ this.data=res; console.log('bye'); }, (err)=>console.log(err), ()=>console.log("Done") ); 代替if...else

if... else if

为什么呢?因为如果if(input>largest) largest = input; else smallest = input; 的值不大于input,那么它显然最小,你可以直接将值存储在largest变量中。
试试这个,肯定你会得到正确的答案。