我试图通过重载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重载函数中放置什么,以便按预期获得输入?
答案 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>
时),它会终止循环。