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

0

У меня возникли проблемы с получением этой программы для вывода информации в правильном формате. Функция 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;
}
  • 1
    Не могли бы вы уточнить этот «неправильный вывод»? Какой выход вы ожидаете и что получаете?
  • 0
    @PakkuDon: он должен считывать в файле и находить самую высокую температуру, самую низкую температуру и среднее значение всех температур за один день для каждого дня, записанного в файле.
Показать ещё 2 комментария
Теги:
output-formatting

1 ответ

1
  • Проверьте этот цикл:
    for (unsigned int я = loopDay; я < 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.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню