所以,我正在尝试创建一个程序,输出最小的输入,最大的输入,以及输入的平均值或平均值。到目前为止,最大值和平均值都在工作,但除非我输入低于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的任何值都不行。
非常感谢!
答案 0 :(得分:2)
您的代码存在漏洞,因为1)scanf("%f",&input)!=EOF
不是您检查有效input
的方式(正如David C. Rankin指出的那样); 2)您没有初始化smallest
和largest
;严格来说,你的结果可能是不确定的。
我认为您需要的是将smallest
和largest
号码初始化为第一个有效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
变量中。
试试这个,肯定你会得到正确的答案。