ACM文件测试数据及文件操作

本文介绍了使用C++进行文件输入输出的两种方法:一种是通过预处理指令实现的重定向方式,适用于本地调试;另一种是直接使用fopen等函数进行文件操作,适合于比赛中不允许使用重定向的情况。文章提供了具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:http://blog.youkuaiyun.com/u012852986/article/details/45009251?ref=myread


一、文件测试数据

以前在做题时,遇到需要控制台输入数据的时候,总是从键盘一个一个敲进去,再一个个检查输出的是否正确。虽然当时也感觉效率太低了,但一直没想到还有解决办法。最近在看算法竞赛入门经典时,才发现可以用文件读入读出的方式检查程序。先上代码。

#include<cstdio>  
#include<math.h>  
#include<iostream>  
#include<algorithm>  
#include<cstring>  
#define LOCAL  
using namespace std;  
int main()  
{     
    #ifdef LOCAL  
        freopen("data.in.txt","r",stdin);  
        freopen("data.out.txt","w",stdout);  
    #endif  
    XXX  
    return 0;  
}  

其中,#ifdef和#endif中的代码块只有在本地运行时才会执行,并且接下来的输入都将从data.in中读入,最后结果输出到data.out文件中
需要注意的是:最后提交代码时,要把#define LOCAL删掉或者注释掉,这样就可以从控制台输入输出了


二、文件操作

这种方法用在比赛要求文件输入输出,同时又禁止用重定向方式(上述方式即为重定向方式)

#include<cstdio>  
#define INF 10000000000   
using namespace std;  
int main()  
{     
   FILE *fin,*fout;  
   fin=fopen("data.in.txt","rb");  
   fout=fopen("data.out.txt","wb");  
   int x,n=0,min=INF,max=-INF,s=0;  
   while(fscanf(fin,"%d",&x)==1)  
   {  
        s+=x;  
        if(x<min)min=x;  
        if(x>max)max=x;  
        n++;  
   }  
   fprintf(fout,"%d %d %.3f\n",min,max,(double)s/n);  
   fclose(fin);  
   fclose(fout);  
   return 0;  
}  

相比于从控制台输入输出,只是把scanf改为fscanf,并且添加第一个参数fin;把printf改为fprintf,并且添加第一个参数fout。最后再关闭两个文件

三、重定向和fopen的比较

重定向虽然写起来简单,但是不能同时读写文件和标准输入输出;fopen可以反复打开并读写文件(想把fopen版的改为标准输入输出,只需要把fin=stdin;fout=stdout)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值