在做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 <stdio.h> 
#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 <stdio.h> 
#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。

freopen函数在竞赛中的使用相关推荐

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

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

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

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

  3. 《算法竞赛中的初等数论》(三)正文 0x30 积性函数(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

  4. 程序竞赛中常用的C字符串函数

    程序竞赛中常用的C语言字符串处理函数 前言: 最好是使用C++的std::string,但是有些情况下,比如字符串比较等,反而是C风格的字符串比较灵活.以下列举常用的函数. 字符串操作 char* s ...

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

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

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

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

  7. freopen()函数

    freopen函数通过实现标准I/O重定向功能来访问文件,而fopen函数则通过文件I/O来访问文件. freopen函数在算法竞赛中常被使用.在算法竞赛中,参赛者的数据一般需要多次输入,而为避免重复 ...

  8. 竞赛专题(四)特征工程-竞赛中的必杀技

    点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 为了帮助更多竞赛选手入门进阶比赛,通过数据竞赛提升理论实践能力和团队协作能力.Data ...

  9. 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...

最新文章

  1. 使用AndroidStudio创建自定义gradle插件并被引用实战例子
  2. Oracle 原理:复杂的SQL语句
  3. Pytorch使用Vision Transformer做肺癌和结肠癌组织病理学图像分类
  4. AR科技贯穿里约奥运始终 腾讯QQ营销顺风车值了
  5. python 私有云_构建私有云伴随着哪些需求?
  6. 51单片机控制电机正反转
  7. c++ 编译添加dll_通达信DLL编程(三)
  8. 计算机考研需要过英语六级吗,研究生毕业要过英语六级吗 研究生毕业对英语六级有要求吗...
  9. 使用记事本完成第一个Java程序的开发遇到异常
  10. 0.1+0.2 为什么不等于0.3
  11. minitab画出主效应图并画出等值线图
  12. 流光溢彩 diy_您需要的只是流光溢彩
  13. 高一计算机专业班主任工作总结,【班主任工作总结报告计算机材料】
  14. Scrapy 抓取指数基金6个月前10 名 存到mongodb 中
  15. CREATE TABLE 时的 SQL UNIQUE 约束
  16. 论文记录3_CycleGAN-损失函数部分
  17. 31:字符串p型编码
  18. 板材开料最优算法_电子开料锯比较普通锯的五大优势与具体的区别
  19. 主要数据挖掘软件比较
  20. 麻将算法(三)碰牌以及杠牌

热门文章

  1. 第四范式完成C+轮融资,投后估值约20亿美元
  2. Vue技巧小结(持续更新)
  3. 安装2019Pycharm最新版本-详细教程--激活码
  4. python分组后对日期排序_python对分组进行排序
  5. “十一黄金周” 绵山笑迎五湖四海宾客
  6. Windows下Kafka集群搭建
  7. ABP框架下文件下載
  8. 在找工作的过程中,面试一定要经历的逻辑推理题...
  9. 逻辑思维类面试题汇集一
  10. 一段代码完成所有分享功能,分分钟搞定分享功能