输入输出

每次测试都要手动输入许多数,这时可以把输入的数据保存在文件中,输出的数据也保存在文件中,只要事先把输入的数据保存在文件中·,就不必每次重新输入;
数据输出在文件中也避免了“输出太多,一卷屏就看不见了“的尴尬,运行结束后,慢慢浏览输出文件即可。如果有标准答案文件,可以进行文件比较(–>在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的写法稍显繁琐,但会比较灵活。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值