首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在my_ifstream.eof中没有‘`while (!my_ifstream()){ getline(my_ifstream,line) }’?

在my_ifstream.eof中没有‘`while (!my_ifstream()){ getline(my_ifstream,line) }’?
EN

Stack Overflow用户
提问于 2011-10-02 01:11:31
回答 2查看 2.8K关注 0票数 4

本网站上,有人写道:

同时(!)myfile.eof() { getline (myfile,line);cout <<行<< endl;}这是错误的,请仔细阅读eof()成员函数的文档。正确的代码是: 而( getline( myfile,line)) cout <<线<< endl;

为什么会这样呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-02 02:15:56

有两个主要原因。@Etienne已经指出了一个问题:读取可能由于某些原因而失败,而不是到达文件的末尾,在这种情况下,您的第一个版本将进入一个无限循环。

然而,即使没有其他故障,第一个也不能正常工作。直到读取尝试失败之后才会设置eof(),因为文件的末尾已经到达。这意味着第一个循环将执行一个您并不真正想要的额外迭代。在本例中,这只会在文件末尾添加一个额外的空行(空)。取决于您正在使用的是什么,这可能重要,也可能无关紧要。根据用于读取数据的内容,在输出中重复最后一行也是相当常见的。

票数 8
EN

Stack Overflow用户

发布于 2011-10-02 01:16:08

流操作(如读取)可能由于多种原因而失败。eof()只测试其中之一。要测试它们,只需使用流的void *转换操作符即可。这就是在第二个片段中所做的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7623999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档