在执行两个顺序的freopen时,file1包含偶数的ints。
int x, y;
freopen("file1", "r", stdin);
while (cin >> x) {
cin >> y;
}
freopen("file2", "r", stdin);
cin >> x;
cout << x << endl;在第一个文件中打印数据很好,而在第二个情况下,x是错误的,
如果我在到达终点之前中断了第一个循环一切都很好,
cin怎么了?
发布于 2016-07-30 17:53:12
问题的原因:
问题来自于C库和C++库的混合。
您的freopen()在stdin上运行得很好。如果您使用scanf()直接在stdin上读取相同的代码,它将完美地工作。但是您的程序不读stdin:它使用stdin这个事实从cin中提取输入。
不幸的是,设置在第一个文件末尾的错误状态标志流上的eof()将保持不变,尽管在底层stdin上进行了第二次重新打开。
如何解决它:
您只需使用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);
}https://stackoverflow.com/questions/38676567
复制相似问题