freopen在竞赛怎么用

freopen在竞赛怎么用,第1张

freopen在竞赛的用法如下:

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 )

祝大家用的开心, 呵呵。。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12111352.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存