freopen用法

freopen用法在做 acm 题目的过程中 我们需要在本地机器上调试 调试过程中 如果输入数据少还可以接受 但如果输入数据很庞大的话 我们就很难忍受一次又一次的重新输入和调试了 通过 google 找到一种简便的方法 那就是 freopen 函数 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 使用 freopen 函数可以解决测试数据输入问题 避免重复输入 不失为一种简单而有效的解决方法 nbsp nbsp nbsp nbsp 下面为函数的简介 详细可参见 nbsp http www

from: http://blog.csdn.net/seagullyoyo/article/details/点击打开链接 //感谢原作者



在做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指定的文件中。标准流文件具体是指stdinstdoutstderr其中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+<<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里就有这个问题:

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

AThere 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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230362.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月3日 上午9:01
下一篇 2026年3月3日 上午9:22


相关推荐

  • idea启动tomcat日志乱码

    idea启动tomcat日志乱码乱码样式:解决方案:如下图设置tomcat1.代码:-Dfile.encoding=UTF-82.进入设置界面:set—>editor—>fileencoding(全部设置为UTF-8)*(最重要)3.进入idea的安装文件中,bin文件下,修改idea.exe.vmoptions和idea64.exe.vmop…

    2022年6月20日
    68
  • SendMessage 详解

    SendMessage 详解http www cnblogs com rosesmall p 3248244 html 窗体操作 控件 文本 系统操作等等 笑笑小白归类自己需要的资料 慢慢爬行 vbsendmessag 详解 1SendMessage 函数的常用消息及其应用 有点长 希望能对大家有所帮助 函数原型 DeclareFunct

    2026年3月18日
    2
  • ActionScript项目无法调试[通俗易懂]

    ActionScript项目无法调试[通俗易懂]C:\WINDOWS\system32\Macromed\Flash\Flash10b.ocx程序调试需要安装9版本的,这是已经安装的10版本的,需要再下一个flashplayer_10_ax_debug.exe来提供支持

    2022年10月14日
    6
  • matlab怎么对语音信号处理,语音信号处理MATLAB程序

    matlab怎么对语音信号处理,语音信号处理MATLAB程序试验一语音信号处理语音信号处理综合运用了数字信号处理的理论知识,对信号进行计算及频谱分析,设计滤波器,并对含噪信号进行滤波。一,具体分为以下步骤:(1)语音信号的采集:利用Windows下的录音机,录制一段话音。然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,播放语音信号,并绘制原始语音信号;(2)对原始信号加入噪声:对原始语音信号加入s=0.05*sin(2*pi*f*T…

    2022年5月25日
    49
  • 六:Python断言方法:assert

    六:Python断言方法:assert前言在测试用例中 执行完测试用例后 最后一步是判断测试结果是 pass 还是 fail 自动化测试脚本里面一般把这种生成测试结果的方法称为断言 assert 用 unittest 组件测试用例的时候 断言的方法还是很多的 下面介绍几种常用的断言方法 assertEqual assertIn assertTrue 基本断言方法基本的断言方法提供了测试结果是 True 还是 False 所有的断言方法

    2026年3月17日
    1
  • dsp定时器初始化程序C语言,C语言定时器实验

    dsp定时器初始化程序C语言,C语言定时器实验C语言定时器实验实验三C语言定时器实验一、实验目的1.进一步熟悉DSP的中断机制2.在掌握中断服务程序编写的基础上进一步熟悉定时器的运用3.进一步掌握如何编写DSP中断服务子程序二、实验设备1.具有USB接口的PC机一台2.USB仿真器一台3.ARM/DSP/FPGA实验箱一台三、实验原理本实验是在我们基本上掌握DSP中断机制的基础上,进一步学习如何在DSP内部实现定时器的正确操作以及定时器中…

    2022年7月26日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号