使用重载输入流运算符读取带字符串的文件>>
Posted
技术标签:
【中文标题】使用重载输入流运算符读取带字符串的文件>>【英文标题】: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 重载函数中放入什么,以便按预期获得输入?
【问题讨论】:
【参考方案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>
时),终止循环。
【讨论】:
谢谢您,根据您的解释,我设法找到了解决方案!以上是关于使用重载输入流运算符读取带字符串的文件>>的主要内容,如果未能解决你的问题,请参考以下文章