使用重载输入流运算符读取带有字符串的文件>>

时间:2016-03-28 03:17:10

标签: c++

我试图通过重载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重载函数中放置什么,以便按预期获得输入?

1 个答案:

答案 0 :(得分:0)

此...

MYCLASS

......被打破了。您应该尝试将数据读取并解析为变量,然后检查失败/ eof。在阅读完最后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>对象,它不是一个非常可扩展的模型。您可以改为使用分隔符(例如,当一行中的第一个单词不是名称,但是.block{ height : 50vh; width : 50vw; } <div class="block"> //do some thing.... </div> 时),它会终止循环。