该程序运行但我得到一些愚蠢的值输出,我不知道为什么。有人能提供一些见解吗?
#include <stdio.h>
int main()
{
// Declare values and open weather.txt
FILE *gpep;
int k;
float wind[11], temp[11], num[11], minT=800, maxT=12, minW=800, maxW=9,
sum_wind=0, sum_temp=0, avgW, avgT;
gpep = fopen("gpep.txt", "r");
if (gpep != NULL){
gpep
for (k = 0; k < 13; k++)
{
fscanf(gpep, "%f %f %f" , &num[k], &wind[k], &temp[k]);
sum_wind += wind[k];
sum_temp += temp[k];
avgW= sum_wind/13;
avgT= sum_temp/13;
printf("Average Temp: %f \n Average wind: %f \n", avgT, avgW);
}
else
{
printf("Can't Open\n" );
}
fclose(gpep);
getchar();
getchar();
return 0;
}
答案 0 :(得分:3)
计算max和min是错误的,看看这个:
if (wind[k] > maxW) {
wind[k]=maxW;
}
它会改变你的数据!应该像:
if (wind[k] > maxW) {
maxW=wind[k]; // stores a greater value in maxW
}
你也有整数除法的问题,考虑使用双打:
double avgW; // declare it as a real
和下一个:
avgW = sum/13.0; // floating division
但是,我们不明白为什么你除以13 ???不应该是常数,而是当前读取元素的数量:
avgW = ((double)sum)/(k+1); // convert one to double to ensure correct division
--- --- EDIT
你也有初始化问题,实际上你没有初始化avg,sum等。你必须!将它们初始化为sum = 0,max = less possible value等:
int sum=0;
int maxW = INT_MIN;
int minW = INT_MAX;
等
答案 1 :(得分:1)
我认为你的问题是因为整数除法(即sum_wind/13
和sum_temp/13
)。您应该将它们声明为float
或double
变量,以便获得正确的除法结果。整数除法产生截断为零的结果。