父类和子类中的文件I / O的C ++问题

时间:2014-04-04 14:43:04

标签: c++ io polymorphism parent-child

我有一个编程任务,我被困在最后一部分。我需要从.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;
}

感谢您的帮助。

2 个答案:

答案 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;
}

serialNumserviceDate现在应该包含正确的值。

输入:

T
T001
3/14/14
F
1550

我得到了一个最终状态: serialNum = T001serviceDate = 3/14/14

答案 1 :(得分:-1)

我认为你应该在使用getline()之前先打开一个文件来阅读。