Один и тот же код работал на другом ПК, но не работает на этом - PullRequest
0 голосов
/ 06 апреля 2019

Задача состоит в том, чтобы рассчитать среднегодовую температуру для каждого из озер и среднегодовую для всех шести озер. собрать вместе.

Текст должен быть прочитан из файла ниже. Когда я сохранил его на рабочем столе, я убрал все строки, кроме той, которая содержит фактические данные, поэтому в моем текстовом файле есть только цифры, которые начинаются с

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

Это работало в школе и в среднем нормально, но теперь не работает.

1 Ответ

2 голосов
/ 06 апреля 2019

во всех

для (строка = 1; строка <= 365; строка ++) </p>

диапазон индекса недопустим, должен быть

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...