• 复赛注意事项:关于文件读写的格式


    无论小学复赛,还是初中、高中的noip复赛,都必须注意这个问题。
    如果在代码中,书写格式错误,或者写了具体的文件路径,测试成绩必为0分。
    所以请参加复赛的同学,一定要注意这个问题。否则做对了,还0分,太冤了。

    以一个题目为例。例子见:
    http://cojs.tk/cogs/problem/problem.php?pid=1

    加法问题
    输入文件:aplusb.in   输出文件:aplusb.out
    时间限制:1 s   内存限制:12 MB

    这是一个经典的入门问题,通过此问题,你可以学会如何使用该评测系统。

    【问题描述】
    现在有两个实数,分别是A和B。请你从文件中读取A和B,计算它们的和A+B,并把它输出到文件中。(保留到整数)
    【输入格式】
    第一行:一个实数A
    第二行:一个实数B
    【输出格式】
    第一行:一个整数C = A+B
    【输入样例】
    1
    2
    【输出样例】
    3

    一、Pascal
    针对以上例子,提交的正确格式是:

     1 program aplusb(input,output);
     2 var a,b:real;
     3 begin
     4   Assign(input, 'aplusb.in'); Reset(input); //输入文件与标准输入流关联,并重定向
     5   Assign(output, 'aplusb.out'); Rewrite(output); //输出文件与标准输出流关联,并重定向
     6   //
     7   readln(a);
     8   readln(b);
     9   writeln(a+b:0:0);
    10   //
    11   Close(input); Close(output); //最后别忘了关闭关联(文件)。
    12 end.


    所以,在考试之前的半小时左右时间内,就可以默写如下代码在记事本中,准备应用:

     1 program xxx(input,output);
     2 var i,j:longint;
     3 begin
     4   //Assign(input, 'xxx.in'); Reset(input);
     5   //Assign(output, 'xxx.out'); Rewrite(output);
     6   //
     7   //...
     8   //
     9   //Close(input); Close(output);
    10 end.


    然后在考试时,编写代码时,进行调试的时候,还是键盘输入,屏幕输出。
    编写代码,测试完成后,在提交时,把三处出现的“xxx”,修改为具体题目规定的名称。
    特别注意:输入、输出的文件名之前,不能写上路径。否则就是0分。
    再把begin后的第一、二行,及end前的一行,之前的注释符号“//”删除掉。
    然后再把文件保存在指定的目录中。


    二、C/C++
    针对以上例子,提交的正确格式是:

     1 #include <stdio.h>
     2 int main()
     3 {  
     4     float i,j;
     5     freopen("aplusb.in", "r", stdin);   //输入文件直接与标准输入流关联
     6     freopen("aplusb.out", "w", stdout); //输出文件直接与标准输出流关联
     7     scanf("%f%f", &i, &j); //接下来,是对标准输入、输出流操作,就是说已经重定向
     8     //
     9     printf("%0.0lf
    ", i+j); //所以不必对具体文件操作,不用在前面加f了
    10     fclose(stdin); fclose(stdout);
    11 } 


    当然还有其它格式,比如:

     1 #include<stdio.h>
     2 int main()
     3 {
     4   float a,b;
     5   FILE *f;
     6 
     7   f=fopen("aplusb.in","r");
     8   fscanf(f,"%f%f",&a,&b);
     9   fclose(f);
    10 
    11   f=fopen("aplusb.out","wb");
    12   fprintf(f,"%0.0lf",a+b,"
    ");
    13   fclose(f);
    14   return 0;
    15 }
    View Code


    又比如:

     1 #include <stdio.h>
     2 int main()
     3 {
     4   float i,j;
     5   FILE *fp1, *fp2; //FILE 在stdio.h中有声明
     6   fp1 = fopen("aplusb.in","r");  //打开输入文件,用来读
     7   fp2 = fopen("aplusb.out","w"); //打开输出文件,用来写
     8   fscanf(fp1,"%f%f", &i, &j); //前面加f,从输入文件中读取
     9   //
    10   fprintf(fp2,"%0.0lf
    ", i+j); //printf -> fprintf 在输出文件中写入
    11   fclose(fp1); fclose(fp2); //这行据说省掉也没关系,不过最好不要省
    12   return 0;
    13 }
    View Code


    这样都是可以的。但是,是第一种最方便。

    所以在开考之前,先默写以下代码在记事本中:

     1 #include <stdio.h>
     2 int main()
     3 {  
     4   int i,j;
     5   //freopen("xxx.in", "r", stdin);
     6   //freopen("xxx.out", "w", stdout);
     7  
     8   //...
     9  
    10   //fclose(stdin); fclose(stdout);
    11 }


    然后调试代码时,一如我们平时做的那样,键盘输入,屏幕输出。
    调试完成后,提交前,把两处“xxx”,修改为题目规定的文件名。
    特别注意:输入、输出的文件名之前,不能写上路径。否则就是0分。
    把相应的注释符号“//”删除掉。
    再把文件保存到规定的目录下。


    每年有菜鸟不清楚这个写法而得0分的。希望同学们注意这个格式问题。
    那为什么不能写上路径?
    因为在测试的时候,程序针对输入文件读取数据,再把输出文件中的数据与标准的答案数据进行比较,从而产生分数。
    你如果写上路径,那程序就从具体路径中去读取文件数据,而这个具体路径中木有这个输入文件,那你就惨了。。。

    Top


  • 相关阅读:
    嵌入式Linux系统的构成和启动过程
    Linux 设备驱动之字符设备
    Linux的inode的理解
    flannel流程解析
    http2协议的理解
    多线程和单线程的理解
    User Token简单总结
    前端组件开发方法论
    Electron踩坑记录
    2020年工作总结
  • 原文地址:https://www.cnblogs.com/xin-le/p/4046298.html
Copyright © 2020-2023  润新知