急!使用freopen后如何将stdout输出流还原回屏幕?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急!使用freopen后如何将stdout输出流还原回屏幕?相关的知识,希望对你有一定的参考价值。
c++中使用freopen("filename","w",stdout) 把输出流弄到文件里,打印完一段文字后,我想重新在屏幕上打印,应该怎样把stdout调回屏幕?
急等答复!今晚能回答的话一定追加分数!谢谢!!
函数原形 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输出流还原回屏幕?的主要内容,如果未能解决你的问题,请参考以下文章