
1、格式:FILE*freopen(constchar*filename,constchar*mode,FILE*stream);2、参数说明:filenme:要打开的文件名。mode:文件打开的模式,和fopen中的模式(r/w)相同。stream:文件指针,通常使用标准流文件(stdin/stdout/stderr)。返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。通过调用freopen,就可以修改标准流文件的默认值,实现重定向。3、使用方法:因为文件指针使用的是标准流文件,因此我们可以不定义文件指针。接下来我们使用freopen()函数以只读方式r(read)打开输入文件slyar.in。freopen(“slyar.in”,“r”,stdin);然后使用freopen()函数以写入方式w(write)打开输出文件slyar.out。freopen(“slyar.out”,“w”,stdout);接下来的事情就是使用freopen()函数的优点了,我们不再需要修改scanf和printf,而是维持代码的原样就可以了。因为freopen()函数重定向了标准流,使其指向前面指定的文件。最后只要使用fclose关闭输入文件和输出文件即可。fclose(stdin);fclose(stdout);若要恢复句柄,可以重新打开标准控制台设备文件,只是这个设备文件的名字是与 *** 作系统相关的。DOS/Windows:freopen(“CON”,“r”,stdin);Linux:freopen(“/dev/console”,“r”,stdin)。
以上就是freopen在竞赛的用法。
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 )
祝大家用的开心, 呵呵。。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)