freopen()函数测试数据

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

使用freopen函数可以解决测试数据输入问题,避免重复输入,不失为一种简单而有效的解决方法。

函数名: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是标准错误流,一般把屏幕设为默认。

下面以在VC下调试“计算a+b”的程序举例。

C语法:

#include <stdio.h>

int main()

{

int a,b;

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

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

while(scanf("%d %d",&a,&b)!=EOF)

printf("%d\n",a+b);

fclose(stdin);//关闭文件

fclose(stdout);//关闭文件

return 0;

}

C++语法

#include <stdio.h>

#include <iostream.h>

int main()

{

int a,b;

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

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

while(cin>>a>>b)

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

fclose(stdin);//关闭文件

fclose(stdout);//关闭文件

return 0;

}

freopen("debug\\in.txt","r",stdin)的作用就是把标准输入流stdin重定向到debug\\in.txt文件中,这样在用scanf或是用cin输入时便不会从标准输入流读取数据,而是从in.txt文件中获取输入。只要把输入数据事先粘贴到in.txt,调试时就方便多了。

类似的,freopen("debug\\out.txt","w",stdout)的作用就是把stdout重定向到debug\\out.txt文件中,这样输出结果需要打开out.txt文件查看。

需要说明的是:

1. 在freopen("debug\\in.txt","r",stdin)中,将输入文件in.txt放在文件夹debug中,文件夹debug是在VC中建立工程文件时自动生成的调试文件夹。如果改成freopen("in.txt","r",stdin),则in.txt文件将放在所建立的工程文件夹下。in.txt文件也可以放在其他的文件夹下,所在路径写正确即可。

2. 可以不使用输出重定向,仍然在控制台查看输出。

3. 程序调试成功后,提交到oj时不要忘记把与重定向有关的语句删除。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-21 02:37:11

freopen()函数测试数据的相关文章

freopen函数的使用以及freopen与fopen的区别

freopen函数的使用:参见这篇博客https://www.cnblogs.com/moonlit/archive/2011/06/12/2078712.html 当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中.但由于调试往往不能一次成功,每次运行时,都要重新输入一遍测试数据,对于有大量输入数据的题目,输入数据需要花费大量时间. 使用freopen函数可以解决测试数据输入问题,避免重复输入,不失

【技巧】freopen()函数在ACM中的应用

在做题目的过程当中,我们需要在本机上调试,当然我们可以把测试用例一遍一遍粘贴复制,也经常会遇到测试用例很多的时候,输入和输出混了,还要去找输出和题目当中的对照.另外,有的时候题目给的测试用例太少,需要自己或者队友给想几个临界条件,自己动手多添加几个测试用例,每测一遍都要动手输入的话麻烦又浪费时间.这时候freopen()上场了. 函数名:    freopen() 函数声明:  FILE  *freopen(const char *path,const char *mode,FILE *stre

freopen()函数

freopen函数通过实现标准I/O重定向功能来访问文件,而fopen函数则通过文件I/O来访问文件. freopen函数在算法竞赛中常被使用.在算法竞赛中,参赛者的数据一般需要多次输入,而为避免重复输入,使用重定向. 1 freopen 函数说明 2 3 函数名: freopen 4 功 能: 实现数据重定向到文件中 5 用 法: FILE *freopen(const char *filename, const char *mode, FILE *stream); 6 返回值: 成功,则返回

[转]C语言文件输入/输出ACM改进版(freopen函数)

C语言文件输入/输出ACM改进版(freopen函数) 2009年5月27日 10:379,457 浏览数发表评论阅读评论 文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作. 昨天发了一篇<C语言 使用文件输入/输出数据>,使用的是最普通的文件输入/输出方法,Felix大牛随后给了一种更简单的改进方法,在ACM中应用很广,而且超赞,现在来介绍一下. 这次用到的文件打开函数不再是fopen,而是stdio.h中包含的另一个函数fr

freopen函数 输入输出重定向

平时我们调试的时候,总是要一个个样例输入,再看输出. 但是如果我们输入量比较大的时候,虽然可以用复制功能,但是如果输出内容太多,屏幕显示不了,对于我们调试就很不方便. 这里介绍一下freopen函数的使用.下面先看一个样例: 输入10个数,再输出10个数. 一般我们会这样写: #include"stdio.h" int main() { int n=10; int a[20]; for(int i=1;i<=n;i++) scanf("%d",&a[i

C++ 中 freopen()函数的用法

#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(ci

freopen ()函数

1.格式 FILE * freopen ( const char * filename, const char * mode, FILE * stream ); 2.参数说明 filename: 要打开的文件名 mode: 文件打开的模式,和fopen中的模式(r/w)相同 stream: 文件指针,通常使用标准流文件(stdin/stdout/stderr) 返回值:成功,则返回一个path所指定文件的指针:失败,返回NULL.(一般可以不使用它的返回值) 功能:实现重定向,把预定义的标准流文

C语言标准io函数总结

转自:http://blog.csdn.net/sun_top/article/details/4235992本来是在vscode上用markdown排好版的,结果复制到这上面就变了形,无奈. 函数列表:clearerr() 清除错误 fclose() 关闭一个文件 feof() 如果到达文件尾(end-of-file)返回"True"(真) ferror() 检查一个文件错误 fflush() 书写输出缓存的内容 fgetc() 从流获取一个字符 fgetpos() 获取文件位置指针

Linux下C/C++的文件操作open、fopen与freopen

open是linux下的底层系统调用函数,fopen与freopen c/c++下的标准I/O库函数,带输入/输出缓冲.linxu下的fopen是open的封装函数,fopen最终还是要调用底层的系统调用open.所以在linux下如果需要对设备进行明确的控制,那最好使用底层系统调用(open), open对应的文件操作有:close, read, write,ioctl 等.fopen 对应的文件操作有:fclose, fread, fwrite, freopen, fseek, ftell,