提问人:Herokiller 提问时间:7/31/2016 最后编辑:ChristopheHerokiller 更新时间:7/31/2016 访问量:1323
C++ Freopen 2 文件错误
c++ freopen 2 files error
问:
我在做 2 个连续的 s 时得到并出错,包含偶数个整数freopen
file1
int x, y;
freopen("file1", "r", stdin);
while (cin >> x) {
cin >> y;
}
freopen("file2", "r", stdin);
cin >> x;
cout << x << endl;
在第一个文件中打印数据工作正常,而在第二种情况下是错误的,x
如果我在到达终点之前从第一个循环中断,一切正常,
这是怎么回事?cin
答:
3赞
Christophe
7/31/2016
#1
问题原因:
麻烦来自C库与C++库的混合。
你在 .如果您直接在 stdin 上使用 to reads 编写相同的代码,它将完美地工作。但是你的程序没有读取:它利用 cin
与 stdin
同步的事实来提取输入。freopen()
stdin
scanf()
stdin
cin
不幸的是,尽管在底层 stdin 上第二次重新打开,但在第一个文件末尾的流上设置的错误状态标志仍将保留。eof()
cin
如何解决:
你只需要用cin.clear()重置cin
的状态:
while (cin >> x) {
cin >> y;
}
cin.clear(); // <============= add this
freopen("file2", "r", stdin);
cin >> x;
cout << x << endl;
建议:
在 C++ 中无需使用 stdin 通过 cin 读取文件。使用 .然后,您可以将此代码与以下代码一起使用:istream
cin
ifstream
void process_input(istream &is)
{
int x, y;
while (is >> x)
cout <<x<<endl;
}
int main()
{
ifstream ifs1("file1");
process_input (ifs1); // or cin if you prefer
ifstream ifs2("file2");
process_input (ifs2);
}
下一个:如何从文件 c++ 中读取数据
评论
stdin
freopen
clearerr()
FILE *
freopen(3)