c++从freopen(“CON”,“w”,stdout);回来之后,就不换行了,求大神看一下
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++从freopen(“CON”,“w”,stdout);回来之后,就不换行了,求大神看一下相关的知识,希望对你有一定的参考价值。
很奇怪啊,一直输出q0q0什么的。
freopen("CON","w",stdout); 之后执行 system("cls"); 等系统命令出现乱码的问题
这是因为标准输出stdout的句柄信息发生了改变。
freopen重定向为CON控制台输出之后再调用任何系统命令就会产生乱码错误,因为在重定向过程中将“标准输出”变成了“控制台输出”,虽然两者体现形式都是在控制台上显示,但本质上是不同的。
所以恢复原来的输入输出就可以。
修改方法
【1】保存原来标准输出的句柄,待要恢复的时候,直接将原来的句柄复制回去。
具体为:
增加一个头文件
#include <io.h>
保存
#define STDOUT 1int oldstdout = dup(STDOUT); //保存标准输出的句柄
恢复
dup2(oldstdout,STDOUT); //恢复句
注意:
0,1,2是三个保留的句柄,分别代表stdin、stdout、stderr。
【2】直接用改用fopen()操作文件。
搬运博客
using namespace std;
int main()
freopen("a.out","w",stdout);
printf("fa");
freopen("b.out","w",stdout);
printf("q");
可以正常执行
我想的是用到system("COM",....)之后。
追答什么
追问就是先用“freopen(“a”,“r”,stdout);”将想要输出的输出到a里面,然后接下来的我想让她输出在控制台中用了“freopen(“CON”,“r”,stdout);”是没错的。但是只要后面加上“system”不管是pause,del,cls都会发现不再换行
以上是关于c++从freopen(“CON”,“w”,stdout);回来之后,就不换行了,求大神看一下的主要内容,如果未能解决你的问题,请参考以下文章