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()操作文件。

示例


搬运博客

参考技术A #include <bits/stdc++.h>
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);回来之后,就不换行了,求大神看一下的主要内容,如果未能解决你的问题,请参考以下文章

MFC打开控制台输入信息和关闭控制台

MFC打开控制台输入信息和关闭控制台

有关文件操作的总结

C++ 中 freopen()函数的用法

C++编程

急!使用freopen后如何将stdout输出流还原回屏幕?