标签:
每次测试都要手动输入许多数,这时可以把输入的数据保存在文件中,输出的数据也保存在文件中,只要事先把输入的数据保存在文件中·,就不必每次重新输入;
数据输出在文件中也避免了“输出太多,一卷屏就看不见了“的尴尬,运行结束后,慢慢浏览输出文件即可。如果有标准答案文件,可以进行文件比较(–>在Windows中可以使用fc命令,在Linux中可以使用diff命令)
事实上,几乎所有算法竞赛的输入数据和标准答案都是保存在文件中的。
#define LOCAL //重定向语句,如果比赛要求采用标准的输入输出,要记得在自我测试完后注释掉重定向语句
#include<stdio.h>
#define INF 1000000000
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);//前提是文件里面有数据
freopen("data.out","w",stdout);
#endif // LOCAL
int x,n = 0,min = INF,max = -INF,s = 0;
while(scanf("%d",&x) == 1)
{
s +=x;
if(x<min) min = x;
if(x>max) max = x;
printf("x=%d,min=%d,max=%d\n",x,min,max);
n++;
}
printf("%d %d %.3f\n",min,max,(double)s/n);
return 0;
}
至于什么是重定向语句, 我也不是很清楚╮(﹀_﹀)╭稍微百度了一下,貌似很复杂
如果比赛要求用文件输入输出,但禁止用重定向的方式,则可以用文件读写(fopen)
#include<stdio.h>
#define INF 1000000000
int main()
{
FILE *fin,*fout;
fin =fopen("data.in","rb");//前提是文件里面有数据
fout =fopen("data.out","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++;
// printf("x=%d,min=%d,max=%d\n",x,min,max);
}
fprintf(fout,"%d %d %.3f\n",min,max,(double)s/n);
fclose(fin);
fclose(fout);
return 0;
}
以上代码翻译成中文:声明变量fin和fout,把scanf改成fscanf,第一个参数为fin;把printf改为fprintf,第一个参数为fout,最后执行fclose,关闭两个文件。
把fopen版的程序改写成读写标准输入输出,只需赋值“fin = stdin;fout = stdout;”但注意:不能调用fopen和fclose。
总结:重定向和fopen两种方法各有优劣。重定向的方法写起来简单,但是不能同时读写文件和标准输入输出;fopen的写法稍显繁琐,但会比较灵活。
标签:
原文地址:http://blog.csdn.net/joeycom2/article/details/51339628