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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急!使用freopen后如何将stdout输出流还原回屏幕?相关的知识,希望对你有一定的参考价值。

c++中使用freopen("filename","w",stdout) 把输出流弄到文件里,打印完一段文字后,我想重新在屏幕上打印,应该怎样把stdout调回屏幕?
急等答复!今晚能回答的话一定追加分数!谢谢!!

freopen 用法
函数原形 FILE *freopen(char *filename, char *type, FILE *stream);
第一个参数 filename 是文件名
第二个参数一般是 "r" 或 "w", "r" 代表是从文件读入,"w"代表是写
入到文件
第三个参数一般是 stdin 代表文件读入, 和第二个参数 "r" 连用
stdout 代表写入到文件,和 第二个参数 "w" 连用
用法举例
freopen("a.txt","r",stdin ); 执行这条语句后, 程序中下面所有的
读入将从文件 "a.txt" 中读入
如:
#include <stdio.h>
#include <stdlib.h>
int main()

char ch;
freopen("a.txt","r",stdin);

while( ch= getchar()!= '\n' )
putchar(ch);

return 0 ;

对于这个程序, 那么在控制台下的读入都无效, 他只会从文件
"a.txt"中读入. 运行这个程序前你得先建一个文件 a.txt , 与你的代码
生成的 .exe 文件在同一文件夹中。大家可以试试看。
如果再加一个语句, 程序变为
#include <stdio.h>
#include <stdlib.h>
int main()

char ch;
freopen("a.txt","r",stdin);
freopen("b.txt","w",stdout);

while( ch= getchar()!= '\n' )
putchar(ch);

return 0 ;

程序不会输出任何东西在控制台下, 而把所有输出输出到文件 "b.txt" 中
这个 b.txt 文件可以先不建, 程序会自动在与 .exe 文件相同目录下建立
另外还有两个问题
1. 如何判断文件是否打开了
可以直接 if( freopen("a.txt","r",stdin)== NULL ) return false;
或 if( freopen("b.txt","w",stdout)== NULL ) return false;
表示没有打开
2. 如何使流重新回到控制台上
如果你不想输入或输出到文件了,就加上一句
freopen("CON","r",stdin ); 对应输入
freopen("CON","w",stdout); 对应输出
注意的问题, 因为参数都是 c_字符串, 故不能把 c++ 里面的 string 类对
象作为参数传进去
比如 string str= "a.txt";
你不能这样写 freopen( str, "r", stdin );
可以先把 string 类对像化成 c_字符串, 就用 c_str() 函数
上面的可以这样写 freopen( str.c_str(), "r", stdin );追问

用了freopen("CON","w",stdout)了,没有用!特么的帮我创建了一个叫CON的文件。。他根本不认“CON”这三个字。。。

参考技术A freopen("CON","w",stdout);
完毕
CON指控制台
参考技术B #include <stdio.h>
#include <stdlib.h>
int main()

char ch;
freopen("a.txt","r",stdin);
freopen("b.txt","w",stdout);
while( (ch= getchar())!= EOF )
putchar(ch);
fclose(stdin);
fclose(stdout);

freopen("CON","w",stdout);
printf("nihao!\n");
return 0 ;

参考资料:学习而来

输入输出重定向

0. C语言的标准输入输出

 stdin

 stdout

 stderr

 

1. 重定向到文件

 

 1 #include <stdio.h>
 2 
 3 int main(){
 4     char a[100];
 5     if(1==0){
 6         freopen("data.txt","w",stdout);
 7         printf("hello word");
 8     }else{
 9         freopen("data.txt","r",stdin);
10         
11         scanf("%s",a);
12         printf("%s\n",a);
13     }
14     
15     return 0;
16 }

输出结果

data.txt
-------------------
hello word
-----------------------------

hello
请按任意键继续. . .

 

2. 方式二

重定向(windows):

若输入_Test.exe <data_in.txt >data_out.txt
则从data_in.txt把“hello”读到str中,在把str打印到data_out.txt中.
 
管道(linux, UNIX):
cmd下输入test_out.exe | test_in.exe
则将test_out中打印的内容(xxoo)作为test_in的输入,testin将xxoo打印到标准输入(显示器上).
 

以上是关于急!使用freopen后如何将stdout输出流还原回屏幕?的主要内容,如果未能解决你的问题,请参考以下文章

c++从freopen(“CON”,“w”,stdout);回来之后,就不换行了,求大神看一下

freopen暴力输出数据至记事本

c语言如何将printf产生的数据写到txt文件中

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

有关文件操作的总结

如何从 Windows 应用程序输出到标准输入?