写代码需要读文件,图方便直接用了freopen重定向输入流,后面发现控制台不响应system("pause"),希望在控制台看到的结果还没看清就闪退了;
原因:重定向输入流后,系统只响应来自文件的输入,system("pause"),cin.get();这些的输入都来自文件,所以系统自动跳过去了
解决办法:用freopen("CON", "r", stdin); 这句来改回去,清除cin的错误代码,
//将重定向的标准输入还原,养成好习惯
freopen("CON", "r", stdin);//将标准输入重定向为 CON 控制台
cin.clear();//清除cin中的错误,恢复为默认状态
使用中也证实,在直接用freopen重定向输入或输出流的情况下,使用完成应该及时将其恢复到默认状态,否则会影响程序的后续运行;
示例如下:(这里只重定向了输入流,输出流同理)
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
//将文本中的文字全部读出,并显示出来
void test01()
{
int c;
freopen("test.txt", "r", stdin); //将标准输入重定向为 test.txt
while ((c = cin.get())!= EOF)
cout.put(c);
//将重定向的标准输入还原,养成好习惯
freopen("CON", "r", stdin);//将标准输入重定向为 CON 控制台
cin.clear();//清除cin中的错误,恢复为默认状态
}
//整行读取
const int MAX_LINE_LEN = 10000; //假设文件中一行最长 10000 个字符
void tes