【问题标题】:Reading File with Strings using overloaded input stream operator>>使用重载输入流运算符读取带字符串的文件>>
【发布时间】:2016-03-28 03:17:09
【问题描述】:

我试图通过重载 istream 运算符从文件中获取输入。为此,我宣布它为班级的朋友。然后,我将相同的类作为输入:

file >> *(class pointer);

当我尝试调试需要它工作的代码部分时,它会按预期进入:

istream& operator>> (istream& in, MYCLASS& n)
{
    string buffer;
    while (!in.eof()) { // input is a file
        in >> buffer;
        // do stuff
    }
    return in;
}

问题是缓冲区保持为空(“”)并且没有从文件中获取它假设的内容。通常,文件的格式应该没有问题,因为我在代码中的其他地方使用了类似的方法,没有问题,但在这里以防万一:

* Name Age
* Name Age
* Name Age
...

我应该在我的 istream 重载函数中放入什么,以便按预期获得输入?

【问题讨论】:

    标签: c++


    【解决方案1】:

    这...

    while (!in.eof()) {
    

    ...坏了。您应该尝试读取数据并将其解析到变量中,然后检查失败/eof。不要假设您在阅读最后一个MYCLASS 后一定会在文件末尾。而是:

    string name;
    int age;
    while (in >> name >> age)
        ...do stuff...
    

    如果您确实在每一行上都有某种前导点,请添加 char 并同时阅读:

    char dot;
    string name;
    int age;
    while (in >> dot && dot == '.' && in >> name >> age)
        ...do stuff...
    

    更一般地说,假设输入流的其余部分将包含一个 MYCLASS 对象,这不是一个非常可扩展的模型。您可以改为使用分隔符(例如,当一行中的第一个单词不是名称,而是 <END> 时),终止循环。

    【讨论】:

    • 谢谢您,根据您的解释,我设法找到了解决方案!
    猜你喜欢
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2012-05-10
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多