【发布时间】:2016-12-05 05:15:00
【问题描述】:
我在执行 2 个连续的 freopens 时出错,file1 包含偶数个整数
int x, y;
freopen("file1", "r", stdin);
while (cin >> x) {
cin >> y;
}
freopen("file2", "r", stdin);
cin >> x;
cout << x << endl;
在第一个文件中打印数据可以正常工作,而在第二种情况下 x 是错误的,
如果我在到达终点之前从第一个循环中断,一切正常,
cin 在这里发生了什么?
【问题讨论】:
-
freopen 是 C 库函数,而不是 C++ 库函数。
-
很明显,
stdin上的文件结束条件仍然存在,并且不会被freopen清除。它的手册页没有说明预期的行为。您应该可以通过显式调用clearerr()来完成这项工作。 -
cin 和 >> 绝对是 c++ 和 freopen 和 stdin,尽管属于 c 标准库,但可以在 c++ 中使用
-
freopen 返回一个新的
FILE *供您使用,而您并没有使用它。你觉得freopen(3)是做什么的?
标签: c++ file-io g++ iostream cin