我有一项编程任务,我被困在最后一部分。我需要从 .txt 文件中读取输入。父类是火车车厢,子类是油 jar 车和厢式车厢,每个类都有一个 readData 类函数。
这是来自 .txt 的示例输入:
T
T001
3/14/14
F
1550
第一行区分了棚车和油 jar 车,我的 main() 处理得很好。接下来读入的两行是序列号和维修日期。最后两行由油 jar 车子类 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;
}
为什么没有正确读取数据?此外,这里是 setter :
void RRCar::SetSerial(const string& NewSerial)
{
serialNum = NewSerial;
}
void RRCar::SetServiceDate(const string& NewDate)
{
serviceDate = NewDate;
}
感谢您提供的所有帮助。
最佳答案
我相当确定您唯一的问题是您没有跳过第一行。如果您的文本文件使用换行符分隔并且您使用的是 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
关于父类和子类中文件 I/O 的 C++ 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865872/