Com*_*erd 9 c++ binaryfiles text-files
我的老师说我们不应该使用EOF来读取文本文件或二进制文件信息,而应该使用(afile >> x).他没有解释原因,有人可以向我解释.有人也可以解释这两种不同的阅读方法有什么不同
//Assuming declaration
//ifstream foobar
( ! foobar.eof() )
{
foobar>>x; // This is discouraged by my teacher
}
while (foobar>>x)
{
//This is encouraged by my teacher
}
Run Code Online (Sandbox Code Playgroud)
Set*_*gie 15
因为在您尝试从中读取文件之前文件不在最后.
operator>>返回对尝试读取后成功或失败状态的流的引用,并且流计算结果true是否成功或false失败.eof()首先测试意味着文件中没有有用的数据但是还没有EOF,然后当你从中读取时,它处于EOF并且读取失败.
另一个重要的细节是,operator>>对于流,跳过所有前导空格,而不是尾随空格.这就是为什么文件在读取之前不能处于EOF并且在读取之后处于EOF的原因.
此外,前者在文件中的下一个数据是无法读入整数的数据(例如,下一个数据x)时工作,而不仅仅是在EOF时,这非常重要.
例:
考虑一下代码:
int x, y;
f >> x;
if (!f.eof())
f >> y;
Run Code Online (Sandbox Code Playgroud)
假设f是一个包含数据的文件123?(␣表示空格),第一次读取将成功,但之后文件中没有更多的整数,并且它不在 EOF中.第二次读取将失败并且文件将处于EOF,但您不知道,因为您在尝试阅读之前测试了EOF.然后你的代码继续导致未定义的行为,因为它y是未初始化的.
| 归档时间: |
|
| 查看次数: |
393 次 |
| 最近记录: |