【发布时间】:2013-02-14 18:46:47
【问题描述】:
以下代码只打印文件一次:
#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 标志有关,但我不知道如何解决。
干杯。
【问题讨论】:
-
不不不
while (!infile.eof())不要这样做!请改用while(infile >> c) { //do stuff with c }。 -
@TonyTheLion 我不确定您是否可以将
operator>>与二进制文件一起使用,但您的评论仍然是朝着正确方向迈出的一步。我用来读取二进制文件的是while( infile.read( &c, 1 ) { ... }另外,James,如果您使用infile.good(),第二次没有打印任何内容的原因是因为第一个循环设置了一些标志。在开始第二个循环之前尝试调用infile.clear()。 -
@TonyTheLion 或
while ( infile.get( c ) )。甚至int c = infile.get(); while ( c != EOF ) { ... ; c = infile.get(); }。 -
@Praetorian 为什么不能将
>>用于以二进制模式打开的文件(不一定是二进制文件)。