谁能解释一下在 C++ 中访问文件时 while 条件是如何工作的。在 while 条件下,employeeLine
是一个字符串。
while ( !inFile.getline( employeeLine, MAX_LINE, ‘\n’ ).eof( ) )
{
//some code here
}
如果文件包含这样的数据,那么 由于没有换行符,代码是否会处理最后一行数据
墓33bb9.75<\n>
bb玛丽bb26bb10.15 (eof)
最佳答案
首先,inFile.getline(...)
返回流,即对 inFile
的引用。当流到达文件末尾时,标志 std::ios_base::eofbit
被设置并且 inFile.eof()
返回 true
。虽然有任何输入,但不会设置此标志。如果最后一行不完整,即缺少换行符,则不会处理!
但是请注意,不一定会到达文件末尾:如果出现问题,std::ios_base::failbit
将被设置并且流将不会响应任何进一步的尝试阅读一些东西:你会有一个无限循环。 std::istream::getline()
会在行太长无法放入缓冲区时设置 std::ios_base::failbit
MAX_LINE - 1
个字符)。流可能在未设置 std::ios_base::eofbit
的情况下进入故障模式的另一种潜在情况是从使用的流缓冲区中抛出异常时。
一般来说,更好的方法是将流转换为bool
,即使用
while (inFile.getline(employeeLine, MAX_LINE)) {
// ...
}
不需要将 '\n'
作为最后一个参数传递,因为它是默认参数。也没有坏处。
请注意,上面的代码不会处理超过 MAX_LINE
的行。这可能是有意的,例如,为了避免基于无限大线路的拒绝服务攻击。通常,最好使用 std::string
,但是:
for (std::string line; std::getline(inFile, line); ) {
// ...
}
关于c++ - 在 C++ 文件中使用 eof(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20985712/