freopen

来源:互联网 发布:女程序员好找男朋友吗 编辑:程序博客网 时间:2024/06/09 23:37

本文转自:http://www.cnblogs.com/moonlit/archive/2011/06/12/2078712.html

 

当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,

当能得到正确运行结果后,才将程序提交到oj中。但由于调试往往不能一次成功,每次运行时,都要重新输入一

遍测试数据,对于有大量输入数据的题目,输入数据需要花费大量时间。        

 

使用freopen函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。

函数名:freopen 声明:FILE *freopen( const char *path, const char *mode, FILE *stream );

 所在文件: stdio.h 参数说明: path: 文件名,用于存储输入输出的自定义文件名。 mode: 文件打开的模式。

和fopen中的模式(如r-只读, w-写)相同。 stream: 一个文件,通常使用标准流文件。

返回值:成功,则返回一个path所指定文件的指针;失败,返回NULL。(一般可以不使用它的返回值)

功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。

标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,

默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。        

 

 下面以在VC下调试“计算a+b”的程序举例。

 C语法:

 #include <stdio.h>

int main()

{

 int a,b; freopen("debug\\in.txt","r",stdin);

 //输入重定向,输入数据将从in.txt文件中读取

freopen("debug\\out.txt","w",stdout);

 //输出重定向,输出数据将保存在out.txt文件中

while(scanf("%d %d",&a,&b)!=EOF) printf("%d\n",a+b);

 fclose(stdin);//关闭文件

 fclose(stdout);//关闭文件

 return 0;

 }

C++语法

 #include <stdio.h>

 #include <iostream.h>

int main()

 {

int a,b;

freopen("debug\\in.txt","r",stdin);

 //输入重定向,输入数据将从in.txt文件中读取

 freopen("debug\\out.txt","w",stdout);

 //输出重定向,输出数据将保存在out.txt文件中

 while(cin>>a>>b) cout<<a+b<<endl;

 // 注意使用endl

fclose(stdin);//关闭文件

fclose(stdout);//关闭文件

return 0;

}        

freopen("debug\\in.txt","r",stdin)的作用就是把标准输入流stdin重定向到debug\\in.txt文件中,

这样在用scanf或是用cin输入时便不会从标准输入流读取数据,而是从in.txt文件中获取输入。

只要把输入数据事先粘贴到in.txt,调试时就方便多了。

 类似的,freopen("debug\\out.txt","w",stdout)的作用就是把stdout重定向到debug\\out.txt文件中,

这样输出结果需要打开out.txt文件查看。        

需要说明的是:        

1. 在freopen("debug\\in.txt","r",stdin)中,将输入文件in.txt放在文件夹debug中,

文件夹debug是在VC中建立工程文件时自动生成的调试文件夹。如果改成freopen("in.txt","r",stdin),

则in.txt文件将放在所建立的工程文件夹下。in.txt文件也可以放在其他的文件夹下,所在路径写正确即可。

2. 可以不使用输出重定向,仍然在控制台查看输出。        

3. 程序调试成功后,提交到oj时不要忘记把与重定向有关的语句删除。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机从美国寄回中国被海关扣怎么办 摩托车新买的后悔了想卖怎么办? 淘宝单号输错了怎么办运费险 在淘宝卖东西快递单号输错了怎么办 淘宝买东西签收后发现坏了怎么办 摩托车购车发票写了别人名字怎么办 新领的发票跟电脑对不上号怎么办 淘宝未发货退款卖家拒绝怎么办 在超市买东西把票丢了不让出怎么办 在淘宝上买东西付款不发货怎么办 买家拍下商品卖家拒绝发货怎么办 没有中文标签被投诉到工商局怎么办 淘宝申请退款卖家强制发货怎么办 1688卖家交易不小心关闭怎么办 拼多多两天不发货怎么办自动退款吗 在家里放的东西找不到了怎么办 在家里烧东西烟太大了怎么办 转转上买的二手东西有问题怎么办? 大巴车过虎门大桥错走小车道怎么办 pe高压膜中间松两边紧怎么办? 穿着浅口的高跟鞋走路老是掉怎么办 五吧同城模特兼职被骗了怎么办 华为手机充电玩黑屏怎么办教学视频 衣服肩膀被衣架撑变形了怎么办 货已经安到客户家客户不付款怎么办 微商卖家不给退货不给换货怎么办啊 淘宝卖家已签收退货却不退款怎么办 申请换货卖家收到货不给换怎么办 我买了个机器想退货怎么办 卖家要求退回去又拒收怎么办 拼多多48小时还不发货怎么办 退货退款单号填错了退不了款怎么办 淘宝退货退款快递单号填写错怎么办 蘑菇街退货忘记填快递单号了怎么办 您尝试购买的项目已停止供货怎么办 oppo新手机搬家搬了一半怎么办 开手机店手机卖不出去怎么办 京东买的东西误按签收了怎么办 小米5x充电宝充电自动断电怎么办 小米2s开不了机怎么办充电闪红灯 寄快递写错地址但已经发货了怎么办