在C++中的文件中使用eof()
Use of eof() in files in C++
有人能解释一下在C++中访问文件时这个while条件是如何工作的吗。在while条件下,employeeLine
是一个字符串。
while ( !inFile.getline( employeeLine, MAX_LINE, ‘n’ ).eof( ) )
{
//some code here
}
如果文件包含这样的数据,那么代码是否处理最后一行数据,因为没有换行符
Tomb33bb9.75<\n>
bb 2015年3月26日
首先,inFile.getline(...)
返回流,即对inFile
的引用。当流到达文件末尾时,标志std::ios_base::eofbit
被设置,inFile.eof()
返回true
。如果有任何输入,则不会设置此标志。如果最后一行不完整,即缺少换行符,则不会对其进行处理!
然而,请注意,可能不一定能到达文件的末尾:如果出现问题,则设置std::ios_base::failbit
,并且流不会对任何进一步的读取尝试做出响应:您将有一个无限循环。当行太长而无法放入缓冲区时(即,有超过MAX_LINE - 1
个字符),std::istream::getline()
确实设置std::ios_base::failbit
。流可能在不设置std::ios_base::eofbit
的情况下进入故障模式的另一种潜在情况是从使用过的流缓冲区抛出异常。
通常,更好的方法是依赖于流到bool
的转换,即使用
while (inFile.getline(employeeLine, MAX_LINE)) {
// ...
}
不需要传递'n'
作为最后一个参数,因为它是默认参数。也没有害处。
注意,上面的代码不会处理长度超过MAX_LINE
的行。这可能是有意的,例如,为了避免基于无限大线路的拒绝服务攻击。通常,最好使用std::string
,但是:
for (std::string line; std::getline(inFile, line); ) {
// ...
}
如果"inFile.getline( employeeLine, MAX_LINE, ‘n’ ).eof( )
"返回TRUE,则表示我们到达了"inFile"的末尾。所以"!inFile.getline( employeeLine, MAX_LINE, ‘n’ ).eof( )
"意味着我们没有到达"inFile"的末尾。
请参阅MSDN 中的详细信息
- 如何确定我已使用非编码文件到达 EOF?
- 如何在 EOF 之前从文件中读取并将其放入字符串中?
- 如何在从文件中读取整数时使用 file.eof()?
- 文件处理,eof() 定义
- 通过终端在文件中输入时检测EOF(文件结束)时出现问题
- 为什么 ifstream 的读数超出了 EOF?(即使没有打开文件)如何在EOF停止阅读
- 如何将EOF(文件结尾)放入代码::块中?
- .EOF 在读取文件时导致 Seg 错误:FIXXED
- 输入文件读取错误的值,eof 控制循环不会结束
- C OOP,读取文件的问题,EOF使用了两次,排行榜
- 文件设置正确,但eof()和peek()意外地从新流返回了错误的值
- C++和 eof 中的文件读取
- 文件I/O Infinite循环C EOF
- 在读取C 文件时跳过EOF
- 在C++中的文件中使用eof()
- 如何在 EOF (C++) 之前读取多个块中的文件
- 如何在使用ifstream读取txt文件时检查EOF
- 逐行计算文件:EOF 重复最后一个数字(不能使用中断)
- C++:FStream认为它已经达到了二进制文件的EOF
- C ++ .eof.未读取文件的最后一个值