在做acm题目的过程中,我们需要在本地机器上调试。调试过程中,如果输入数据少还可以接受,但如果输入数据很庞大的话,我们就很难忍受一次又一次的重新输入和调试了。通过google,找到一种简便的方法,那就是freopen函数。
        使用freopen函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。 
下面为函数的简介,详细可参见 http://www.cplusplus.com/reference/clibrary/cstdio/freopen.html
函数名: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是标准错误流,一般把屏幕设为默认。通过调用freopen,就可以修改标准流文件的默认值,实现重定向。

在vs2005中有以下例子验证:

#include <cstdio>

#include <iostream>

using namespace std;

int main()

{

int a,b;

freopen("in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取

freopen("out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中

while(cin>> a >> b)

cout<< a+b <<endl; // 注意使用endl

fclose(stdin);//关闭文件

fclose(stdout);//关闭文件

return 0;

}
        freopen("in.txt","r",stdin)的作用就是把标准输入流stdin重定向到in.txt文件中,这样在用scanf或是用cin输入时便不会从标准输入流读取数据,而是从in.txt文件中获取输入。只要把输入数据事先粘贴到in.txt,调试时就方便多了。
类似的,freopen("out.txt","w",stdout)的作用就是把stdout重定向到out.txt文件中,这样输出结果需要打开out.txt文件查看。
    需要说明的是:
        1.  在调用freopen函数实现重定向时,路径名字一定要写正确。
        2. 可以不使用输入重定向,仍然通过键盘输入,也可以不使用输出重定向,仍然在控制台查看输出,这都是可以的,看自己需求来定。
        3. 这种方法适合在本地机器上调试用,程序调试成功后,提交到oj时不要忘记把与重定向有关的语句删除。其实这种问题,有些学校的OJ系统还是考虑到了这个问题,比如杭电的OJ系统,在FAQ里就有这个问题:

Q:Is there any way to determine if my program is runned at Online Judge or not ?

A:There is a conditional define of compiler called ONLINE_JUDGE. Example of using:

C/C++

#ifdef ONLINE_JUDGE

running on online judge

#else

you can do something here on your local computer

#endif

比如,杭电1000题我完全可以这样提交:

#include <cstdio>

#include <iostream>

using namespace std;

int main()

{

#ifdef ONLINE_JUDGE

#else

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

#endif

int a,b;

while(cin>>a>>b)

cout<<a+b<<endl;

return 0;

}

在本地机器调试时,因为没有定义过ONLINE_JUDGE,所以会执行freopen("in.txt","r",stdin);方便本机上的调试,当提交到OJ上后,因为有了ONLINE_JUDGE的定义,所以跳过语句

freopen("in.txt","r",stdin);从int a,b;处开始执行。经测试,AC。

转载于:https://www.cnblogs.com/krisdy/archive/2009/04/04/1429579.html

[skill]freopen()函数在ACM中的使用相关推荐

  1. freopen()函数在ACM中的使用

    #ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endif https://blog.csdn.net/cfz ...

  2. freopen函数在竞赛中的使用

    在做acm题目的过程中,我们需要在本地机器上调试.调试过程中,如果输入数据少还可以接受,但如果输入数据很庞大的话,我们就很难忍受一次又一次的重新输入和调试了.通过google,找到一种简便的方法,那就 ...

  3. C/C++中的freopen()函数使用详解

    C/C++重定向 标准输入输出 的库函数. 所谓重定向输出,就是可以把原本只是输出在控制台的字符,输出到你指定的路径文件中.(输入类似,就是从指定的文件中读取,而不是读取在控制台中的输入.)重定向函数 ...

  4. 利用freopen()函数和fc命令简化程序调试

    大家在参加ACM比赛或者参加c/c++实验技能竞赛的时候,如果遇到大量的输入和大量的输出时,调试起来很不方便.一来如果结果不正确的话,需要重复输入大量数据:二来如果大量输出的话,得仔细检查输出结果与正 ...

  5. c语言 freopen txt_C语言:freopen函数

    当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中.但由于调试往往不能一次成功,每次运行时,都要重新输入 ...

  6. [ACM训练] ACM中巧用文件的输入输出来改写acm程序的输入输出 + ACM中八大输入输出格式...

    ACM中巧用文件的输入输出来改写acm程序的输入输出 经常有见大神们使用文件来代替ACM程序中的IO,尤其是当程序IO比较复杂时,可以使自己能够更专注于代码的测试,而不是怎样敲输入. C/C++代码中 ...

  7. C语言:freopen函数

    当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中.但由于调试往往不能一次成功,每次运行时,都要重新输入 ...

  8. freopen函数的使用

    freopen函数的使用 当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中.但由于调试往往不能一次成功 ...

  9. freopen函数的运用

    当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中.但由于调试往往不能一次成功,每次运行时,都要重新输入 ...

最新文章

  1. python编程需要什么软件-《》 学习python编程需要安装哪些软件?
  2. MyBatis 实际使用案例-settings
  3. C++匿名对象调用成员函数
  4. 设计模式C++实现(5)——原型模式
  5. 画春天的景色计算机教案,大班绘画春天来了教案
  6. 常用API2 正则表达式
  7. Python+sklearn使用朴素贝叶斯算法识别中文垃圾邮件
  8. 【VS开发】ConvertBSTRToString(filename) 不能将string转换为BSTR
  9. Linux 命令 -- tar
  10. java 抽象类 静态变量_Java基础之 接口、抽象类、构造方法、setXxx,getXxx、静态变量和成员变量、代码块、this和super的区别、final关键字、重写与重载...
  11. 快解析:管家婆C9异地访问解决方案
  12. 使用iPhone系统设置开发者,进行弱网测试
  13. 通达信l2行情接口怎么用?
  14. 浅显易懂的经济学常识
  15. iOS的电量测试(Sysdiagnose)
  16. linux怎么用ping通测试连接,ping网络是否连通的步骤_使用ping命令检查网络连通性的方法-系统城...
  17. 计算机或与非门原理,计算机逻辑电路中,与或门,或非门,异或非门,异或门的性质,在线等!!!!...
  18. 最简单的Pycharm中断点的使用讲解
  19. dig命令的使用方法
  20. 500 rewrite or internal redirection cycle while internally redirecting to “index.html“

热门文章

  1. python列表大小限制_Python中列表的项数有限制吗?
  2. 成都昭觉寺客运站班期时刻表 班车信息
  3. Typora历史版本下载链接
  4. 华为手机这6个实用功能,可别浪费了!超好用
  5. 简读《隐私科技白皮书》| 一文了解隐私科技
  6. 离线数仓搭建_16_Azkaban全流程调度
  7. Tomcat各目录作用
  8. 邯郸计算机一级 考点,邯郸计算机等级(一级)考试培训-创硕教育
  9. Win11利用本地组策略编辑器解除网速限制
  10. Python预测 数据分析与算法 学习笔记(特征工程、时间序列)