Не получается правильный вывод

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

Может кто-то указать, что я делаю не так?

#include <iostream>
#include <iomanip>
#include <conio.h>
#include <fstream>
#include <string>

double averageTemp(double total, int number);
double lowTemp(double valueLow);
double highTemp(double valueHigh);
double high = 0;
double low = 0;

int main()
{
std::string dummy = "";
int day, time = 0;

double input1[10][50], input5[10][50], input25[10][50];
/*
Keeps track of the data:
Dimension 1: stores the input for each time of the day.
*/

double m1[10][3], m5[10][3], m25[10][3];
/*
Process data:
Dimension 1:
Index 1: Keeps track of day
Dimension 2:
Index 1: Average temp
Index 2: Low temp
Index 3: High temp
*/

std::ifstream datain;
std::ofstream dataout;

datain.open("curiosity234X.dat");
dataout.open("output.dat");

for (unsigned int i = 0; i < 4; i++)
{
getline(datain, dummy);
}

int dayCount = 0, loopDay;

while (datain >> day >> dummy >> dummy >> input1[day][time]
>> input5[day][time] >> input25[day][time])
{
while (dayCount == 0)
{
loopDay = day - 1;
dayCount++;
}

m1[day][0] = averageTemp(input1[day][time], time);
m1[day][1] = lowTemp(input1[day][time]);
m1[day][2] = highTemp(input1[day][time]);

m5[day][0] = averageTemp(input5[day][time], time);
m5[day][1] = lowTemp(input5[day][time]);
m5[day][2] = highTemp(input5[day][time]);

m25[day][0] = averageTemp(input25[day][time], time);
m25[day][1] = lowTemp(input25[day][time]);
m25[day][2] = highTemp(input25[day][time]);

time++;
}

dataout << std::setw(5) << std::fixed;
dataout << "Average" << "Low" << "High" << std::endl
<< "Temp" << "Temp" << "Temp" <<std::endl
<< "1 meter" << ".5 meters" << ".25 meters" << std::endl;

std::cout << std::setw(5) << std::fixed;
std::cout << "Average" << "Low" << "High" << std::endl
<< "Temp" << "Temp" << "Temp" <<std::endl
<< "1 meter" << ".5 meters" << ".25 meters" << std::endl;

for (unsigned int i = loopDay; i < day; i++)
{
dataout << std::fixed << std::setprecision(1) << std::setw(5);
dataout
<< m1[day][0] << m1[day][1] << m1[day][2]
<< m5[day][0] << m5[day][1] << m5[day][2]
<< m25[day][0] << m25[day][1] << m25[day][2]
<< std::endl;

std::cout << std::fixed << std::setprecision(1) << std::setw(5);
std::cout
<< m1[day][0] << m1[day][1] << m1[day][2]
<< m5[day][0] << m5[day][1] << m5[day][2]
<< m25[day][0] << m25[day][1] << m25[day][2]
<< std::endl;
}

std::cout << std::endl << std::endl << std::endl
<< "The output.dat file has been written and transmitted."<< std::endl;

_getch();
return 0;
}

double lowTemp(double valueLow)
{
if (valueLow < low)
{
::low = valueLow;

return valueLow;
} else
{
return low;
}
}

double highTemp(double valueHigh)
{
if (valueHigh > high)
{
::high = valueHigh;

return valueHigh;
} else
{
return high;
}
}

double averageTemp(double total, int number)
{
double average = total/double(number);

return average;
}

0

Решение

  • Пожалуйста, проверьте этот цикл:
    for (unsigned int i = loopDay; i < day; i++) { ... }

    i переменная не используется внутри тела цикла, поэтому вы делаете одно и то же n раз. Я думаю, что вы должны изменить m1[day][...] с m1[i][...] (то же самое для m5 а также m25).

  • О loopDay переменная:

    while (dayCount == 0)
    {
    loopDay = day - 1;
    dayCount++;
    }
    

    Я полагаю, что вы имеете в виду:

    if (dayCount == 0)
    loopDay = day;
    
    ++dayCount;
    

    В этом случае loopDay сохраняет первый увиденный день (первый день, который вы напечатаете в цикле for). Учитывая, что dayCount не упоминается в других пунктах исходного кода, вы можете избавиться от него и написать:

    if (time == 0)
    loopDay = day;
    
  • Теперь вам нужно изменить верхний предел в цикле for: последний день, который вы видели, должен быть включен так < day должно быть <= day,

Есть другие вещи, которые нужно изменить, но это отправная точка.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]