以下代码只打印一次文件:
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, const char *argv[])
{
ifstream infile;
infile.open("in", ios::binary);
char c;
while (infile.get(c))
{
cout << c;
}
infile.seekg(0, ios::beg);
infile.clear();
while (infile.get(c))
{
cout << c;
}
infile.close();
return 0;
}
我认为这与运行完文件后的eof标志有关,但我不知道如何修复它。
干杯。
您的代码有几个问题:
首先,在使用之前不检查infile.get()
是否成功它的结果,永远。您正在使用infile.good()
进行控制一个循环,infile.eof()
控制另一个循环:infile.eof()
在您知道输入失败之前是无效的,并且infile.good()
从来都不是真正有用的。两个循环都使用while
( infile.get( c ) )
即可。
其次,正如你所说,你永远不会重置导致你以完成第一个循环。一旦你遇到了文件(并且infile.get( c )
已失败),您需要调用infile.clear()
。
最后,当然,你没有检查自己是否成功打开文件,以及seekg
是否成功。你呢通常不必关闭输入文件;它将关闭当它超出范围时自动执行。(另一方面,应该关闭或刷新std::cout
,并验证之后还是可以的。失败时返回0
写下所有的数据是我书中的一个严重错误。)