freopen用法

2023-11-10 15:48
文章标签 用法 freopen

本文主要是介绍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指定的文件中。标准流文件具体是指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。

这篇关于freopen用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383673

相关文章

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

javascript fetch 用法讲解

《javascriptfetch用法讲解》fetch是一个现代化的JavaScriptAPI,用于发送网络请求并获取资源,它是浏览器提供的全局方法,可以替代传统的XMLHttpRequest,这篇... 目录1. 基本语法1.1 语法1.2 示例:简单 GET 请求2. Response 对象3. 配置请求

Go 语言中的 Struct Tag 的用法详解

《Go语言中的StructTag的用法详解》在Go语言中,结构体字段标签(StructTag)是一种用于给字段添加元信息(metadata)的机制,常用于序列化(如JSON、XML)、ORM映... 目录一、结构体标签的基本语法二、json:"token"的具体含义三、常见的标签格式变体四、使用示例五、使用

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

MySQL 字符串截取函数及用法详解

《MySQL字符串截取函数及用法详解》在MySQL中,字符串截取是常见的操作,主要用于从字符串中提取特定部分,MySQL提供了多种函数来实现这一功能,包括LEFT()、RIGHT()、SUBST... 目录mysql 字符串截取函数详解RIGHT(str, length):从右侧截取指定长度的字符SUBST

SQL Server中的PIVOT与UNPIVOT用法具体示例详解

《SQLServer中的PIVOT与UNPIVOT用法具体示例详解》这篇文章主要给大家介绍了关于SQLServer中的PIVOT与UNPIVOT用法的具体示例,SQLServer中PIVOT和U... 目录引言一、PIVOT:将行转换为列核心作用语法结构实战示例二、UNPIVOT:将列编程转换为行核心作用语

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否

Java中的内部类和常用类用法解读

《Java中的内部类和常用类用法解读》:本文主要介绍Java中的内部类和常用类用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录内部类和常用类内部类成员内部类静态内部类局部内部类匿名内部类常用类Object类包装类String类StringBuffer和Stri