输出值大于正常值?

时间:2016-07-05 10:10:27

标签: c

该程序运行但我得到一些愚蠢的值输出,我不知道为什么。有人能提供一些见解吗?

#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;
}

2 个答案:

答案 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/13sum_temp/13)。您应该将它们声明为floatdouble变量,以便获得正确的除法结果。整数除法产生截断为零的结果。