目前的任务是计算每个湖泊的年平均温度,以及所有六个湖泊的年平均温度
放在一起。
文本需要从下面的文件中读取,当我将其保存到桌面上时,我确保删除所有行,不包括带有实际数据的行,因此我的文本文件中只有数字,从开始

  Daily Lake Average Surface Water Temperature
                     From
 Great Lakes Surface Environmental Analysis maps

--------------------------------------------------------
                  Surf. Water Temp. (degrees C)

Year Day    Sup.   Mich.   Huron    Erie    Ont.  St.Clr
--------------------------------------------------------

2017 001    3.88    4.36    4.00    3.06    5.03    2.06
2017 002    3.46    4.36    3.98    3.05    5.01    2.12
2017 003    3.33    4.36    3.94    3.01    5.00    2.14
...etc

我附上了我试过的代码,它在学校工作,但不在我的个人电脑上。
#include <stdio.h>
#include <math.h>
int main()

{
double line[365][8], sup, mich, huron, erie, ont, stclr, avesup, avemich, avehuron, aveerie, aveont, avestclr, ave;
int row, column;
FILE *fp;
fp = fopen("data.txt", "r");

for(row=1;row<=365;row++)
    {
        for(column=1;column<=8;column++)
            {
                fscanf(fp, "%lf", &line[row][column]);
            }
    }

for(row=1;row<=365;row++)
    {

printf("%.0lf\t%.0lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",
line[row][1], line[row][2], line[row][3], line[row][4], line[row][5],
line[row][6], line[row][7], line[row][8]);
    }



for(row=1;row<=365;row++)
    {
        sup = sup + line[row][3];
    }
avesup = sup/365;
printf("%.2lf\n", avesup);

for(row=1;row<=365;row++)
    {
        mich = mich + line[row][4];
    }
avemich = mich/365;
printf("%.2lf\n", avemich);

for(row=1;row<=365;row++)
    {
        huron = huron + line[row][5];
    }
avehuron = huron/365;
printf("%.2lf\n", avehuron);

for(row=1;row<=365;row++)
    {
        erie = erie + line[row][6];
    }
aveerie = mich/365;
printf("%.2lf\n", aveerie);

for(row=1;row<=365;row++)
    {
        ont = ont + line[row][7];
    }
aveont = ont/365;
printf("%.2lf\n", aveont);

for(row=1;row<=365;row++)
    {
        stclr = stclr + line[row][8];
    }
avestclr = stclr/365;
printf("%.2lf\n", avestclr);

ave = avesup + avemich + avehuron + aveerie + aveont + avestclr;
printf("%.2lf", ave);


fclose(fp);
return 0;
}

它在学校起作用了,平均来说很好,但现在不起作用了。

最佳答案

在所有的
for(行=1;行索引范围无效,必须是

for (row=0;row<365;row++)

当然还有同样的问题
for(column=1;column<=8;column++)

一定是谁的
for(column=0;column<8;column++)

阿尔索
  printf("%.0lf\t%.0lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",
         line[row][1], line[row][2], line[row][3], line[row][4], line[row][5],
         line[row][6], line[row][7], line[row][8]);

必须是
  printf("%.0lf\t%.0lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\t%.2lf\n",
         line[row][0], line[row][1], line[row][2], line[row][3], line[row][4],
         line[row][5], line[row][6], line[row][7]);

当你离开一个数组时的行为是未定义的,这就是为什么它(看起来)在某些平台上工作而不是在其他平台上
在数组中,索引从0开始,而不是从1开始

关于c - 相同的代码在另一台PC上运行,但不能在此PC上运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55551502/

10-11 23:17