我有一个编程任务,我被困在最后一部分。我需要从.txt文件中读取输入。父类是铁路车,孩子是坦克车和厢式车,每个都有一个readData类功能。
以下是.txt:
的示例输入T
T001
3/14/14
F
1550
第一行区分了一辆厢式车和一辆坦克车,我的主()处理这个罚款。读入的下两行是序列号和服务日期。最后两行由tank car子类readData函数处理。我需要帮助阅读序列号和日期。
bool RRCar::ReadData(istream& input)
{
string date, serial;
if (input.good())
{
getline(input, serial, '\n');
RRCar::SetSerial(serial);
getline(input, date, '\n');
RRCar::SetServiceDate(date);
return true;
}
else
return false;
}
为什么没有正确读取数据?此外,以下是设置者:
void RRCar::SetSerial(const string& NewSerial)
{
serialNum = NewSerial;
}
void RRCar::SetServiceDate(const string& NewDate)
{
serviceDate = NewDate;
}
感谢您的帮助。
答案 0 :(得分:1)
我很确定你唯一的问题是你没有跳过第一行。如果您的文本文件是使用换行分隔的并且您使用的是getline,则无需指定分隔符(默认为换行符(see reference),但您需要迭代第一行(您不要在这个功能中需要。)
然后我们有:
bool RRCar::ReadData(istream& input)
{
string date, serial;
if (input.good())
{
getline(input, serial); //Dummy call
getline(input, serial);
//Check to see if stream is still good, ie no eofbit, failbit, badbit flags set for input
if( input.good() )
RRCar::SetSerial(serial);
getline(input, date)
if( input.good() )
RRCar::SetServiceDate(date);
return true;
}
else
return false;
}
serialNum
和serviceDate
现在应该包含正确的值。
输入:
T
T001
3/14/14
F
1550
我得到了一个最终状态:
serialNum = T001
和serviceDate = 3/14/14
答案 1 :(得分:-1)
我认为你应该在使用getline()之前先打开一个文件来阅读。