Я работаю над университетским заданием по чтению данных из файла и могу действительно использовать некоторую помощь!
Файл данных содержит данные о погоде и выглядит следующим образом:
31/03/2016 9: 00,14,6,175,17,0,1013,4,1016,9,1017,0,68,2,6,512,22,7,24.1,25,5
Для присвоения требуется, чтобы класс считывал и сохранял дату, время и все значения типа int / double. Я должен использовать класс даты, чтобы прочитать дату, класс времени, чтобы прочитать время, и класс WeatherData объединяет все это, используя перегруженный оператор потока.
Я занимаюсь модульным тестированием класса WeatherData (который будет использоваться в массиве классов WeatherData) с файлом данных, который включает дату, время и только одну двойную переменную: 31.03.2016 9: 00,14.6
Вывод, который я получаю: 31.03.2016 0: 0
Я протестировал классы Date и Time, и они работают как положено. Я не могу понять, почему это не удается после даты. Любая помощь будет принята с благодарностью!
TestWeatherData.cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstdlib>
#include "../Practice/date.h"
#include "../Practice/time.h"
#include "../Practice/weatherdata.h"
using namespace std;
istream & operator >>( istream & input, Date & D )
{
string temp;
string convertToInt;
int tempDay;
int tempMonth;
int tempYear;
getline(input, temp);
stringstream ss(temp);
getline(ss, convertToInt, '/');
tempDay = atoi(convertToInt.c_str());
D.SetDay(tempDay);
getline(ss, convertToInt, '/');
tempMonth = atoi(convertToInt.c_str());
D.SetMonth(tempMonth);
getline(ss, convertToInt);
tempYear = atoi(convertToInt.c_str());
D.SetYear(tempYear);
return input;
}
ostream & operator <<( ostream & os, const Date & D )
{
os << D.GetDay() << "/" << D.GetMonth()
<< "/" << D.GetYear();
return os;
}
istream & operator >>( istream & input, Time & T )
{
string temp;
string convertToInt;
int tempHours;
int tempMinutes;
getline(input, temp);
stringstream ss(temp);
getline(ss, convertToInt, ':');
tempHours = atoi(convertToInt.c_str());
T.SetHours(tempHours);
getline(ss, convertToInt);
tempMinutes = atoi(convertToInt.c_str());
T.SetMinutes(tempMinutes);
return input;
}
ostream & operator <<( ostream & os, const Time & T )
{
os << T.GetHours() << ":" << T.GetMinutes();
return os;
}
istream & operator >>( istream & input, WeatherData & W )
{
string temp;
string convertToDouble;
Date tempDate;
Time tempTime;
double tempDP;
input >> tempDate >> tempTime;
W.setDate(tempDate);
W.setTime(tempTime);
getline(input, temp);
stringstream ss(temp);
getline(ss, convertToDouble);
tempDP = atof(convertToDouble.c_str());
W.setDP(tempDP);
return input;
}
ostream & operator <<( ostream & os, const WeatherData & W )
{
os << W.getDate() << ' ' << W.getTime() << ' ' << W.getDP();
return os;
}
int main()
{
ifstream infile( "data.txt" );
if( !infile ) return -1;
WeatherData W;
infile >> W;
cout << W;
return 0;
}