No `while (!my_ifstream.eof()) { getline(my_ifstream, line)
No `while (!my_ifstream.eof()) { getline(my_ifstream, line) }` in C++?
在这个网站上,有人写道:
while (! myfile.eof() ) { getline (myfile,line); cout << line << endl; }
这是错误的,请仔细阅读eof()的文档memberfunction。正确的代码是:
while( getline( myfile, line)) cout << line << endl;
为什么会这样?
主要有两个原因。@Etienne指出了一个:读取可能会因为某些原因而失败,而不是到达文件的末尾,在这种情况下,您的第一个版本将进入无限循环。
然而,即使没有其他故障,第一个也不能正常工作。eof()
不会被设置,直到读取尝试失败,因为到达了文件的末尾。这意味着第一个循环将执行一个您并不真正想要的额外迭代。在本例中,这只会在文件末尾添加额外的空白(空)行。这取决于你在做什么,可能重要,也可能不重要。根据您用来读取数据的方式,在输出中重复最后一行也是相当常见的。
流操作(如读取)可能由于多种原因而失败。eof()
只测试其中一个。要测试它们,只需使用流的void *
转换操作符。这就是在第二个代码片段中所做的。
相关文章:
- ifstream什么都没读
- ifstream文件在从行中读取时被清除
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 将 ifstream 拆分为 n 个流?
- 如何将 std::ifstream 转换为 std::basic_istream<CharT, Traits>&?
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 尝试打开 ifstream 时出现"Incomplete type"错误
- 是否可以在没有真实文件的情况下创建 ifstream
- 虽然循环不读取整个 ifstream 文件
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- Ofstream和IFSTREAM有什么区别?
- 如何将QByteArray转换为std::istream或std::ifstream?
- ifstream 跳过数字,只写 0
- C++:std::ofstream 方法 open() 在第二次迭代时擦除打开的 ifstream 文件
- 在函数中声明的 ifStream 对象在发布模式下不起作用
- fstream / ifstream / ofstream 对象如何转换为布尔值
- ifstream 尝试读取 9 到 13 之间的无符号字符时非常奇怪的行为
- 尝试在 C++ 中为 ifstream 提供一个变量
- ifstream 读取的字符与文件中写入的字符不同
- 在反转字符串'my.name.is'时,我得到的输出为"is@.name.my"。我不明白'@'是从哪里来的