freopen函数在竞赛中的使用
在做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中有以下例子验证:
|
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题我完全可以这样提交:
|
在本地机器调试时,因为没有定义过 ONLINE_JUDGE ,所以会执行 freopen ("in.txt","r",stdin); 方便本机上的调试,当提交到 OJ 上后,因为有了 ONLINE_JUDGE 的定义,所以跳过语句 freopen ("in.txt","r",stdin); 从 int a,b; 处开始执行。经测试,AC。
freopen函数在竞赛中的使用相关推荐
- [skill]freopen()函数在ACM中的使用
在做acm题目的过程中,我们需要在本地机器上调试.调试过程中,如果输入数据少还可以接受,但如果输入数据很庞大的话,我们就很难忍受一次又一次的重新输入和调试了.通过google,找到一种简便的方法,那就 ...
- freopen()函数在ACM中的使用
#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);#endif https://blog.csdn.net/cfz ...
- 《算法竞赛中的初等数论》(三)正文 0x30 积性函数(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 程序竞赛中常用的C字符串函数
程序竞赛中常用的C语言字符串处理函数 前言: 最好是使用C++的std::string,但是有些情况下,比如字符串比较等,反而是C风格的字符串比较灵活.以下列举常用的函数. 字符串操作 char* s ...
- C/C++中的freopen()函数使用详解
C/C++重定向 标准输入输出 的库函数. 所谓重定向输出,就是可以把原本只是输出在控制台的字符,输出到你指定的路径文件中.(输入类似,就是从指定的文件中读取,而不是读取在控制台中的输入.)重定向函数 ...
- 利用freopen()函数和fc命令简化程序调试
大家在参加ACM比赛或者参加c/c++实验技能竞赛的时候,如果遇到大量的输入和大量的输出时,调试起来很不方便.一来如果结果不正确的话,需要重复输入大量数据:二来如果大量输出的话,得仔细检查输出结果与正 ...
- freopen()函数
freopen函数通过实现标准I/O重定向功能来访问文件,而fopen函数则通过文件I/O来访问文件. freopen函数在算法竞赛中常被使用.在算法竞赛中,参赛者的数据一般需要多次输入,而为避免重复 ...
- 竞赛专题(四)特征工程-竞赛中的必杀技
点击上方"Datawhale",选择"星标"公众号 第一时间获取价值内容 为了帮助更多竞赛选手入门进阶比赛,通过数据竞赛提升理论实践能力和团队协作能力.Data ...
- 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
最新文章
- 使用AndroidStudio创建自定义gradle插件并被引用实战例子
- Oracle 原理:复杂的SQL语句
- Pytorch使用Vision Transformer做肺癌和结肠癌组织病理学图像分类
- AR科技贯穿里约奥运始终 腾讯QQ营销顺风车值了
- python 私有云_构建私有云伴随着哪些需求?
- 51单片机控制电机正反转
- c++ 编译添加dll_通达信DLL编程(三)
- 计算机考研需要过英语六级吗,研究生毕业要过英语六级吗 研究生毕业对英语六级有要求吗...
- 使用记事本完成第一个Java程序的开发遇到异常
- 0.1+0.2 为什么不等于0.3
- minitab画出主效应图并画出等值线图
- 流光溢彩 diy_您需要的只是流光溢彩
- 高一计算机专业班主任工作总结,【班主任工作总结报告计算机材料】
- Scrapy 抓取指数基金6个月前10 名 存到mongodb 中
- CREATE TABLE 时的 SQL UNIQUE 约束
- 论文记录3_CycleGAN-损失函数部分
- 31:字符串p型编码
- 板材开料最优算法_电子开料锯比较普通锯的五大优势与具体的区别
- 主要数据挖掘软件比较
- 麻将算法(三)碰牌以及杠牌