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

 

不管小学复赛,仍是初中、高中的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

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

php

 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.


因此,在考试以前的半小时左右时间内,就能够默写以下代码在记事本中,准备应用:

ide

 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后的第1、二行,及end前的一行,以前的注释符号“//”删除掉。
而后再把文件保存在指定的目录中。


2、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\n", i+j); //因此没必要对具体文件操做,不用在前面加f了
10     fclose(stdin); fclose(stdout);
11 } 


固然还有其它格式,好比:

spa

 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,"\n");
13   fclose(f);
14   return 0;
15 }
View Code


又好比:3d

 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\n", 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分的。但愿同窗们注意这个格式问题。
那为何不能写上路径?
由于在测试的时候,程序针对输入文件读取数据,再把输出文件中的数据与标准的答案数据进行比较,从而产生分数。
你若是写上路径,那程序就从具体路径中去读取文件数据,而这个具体路径中木有这个输入文件,那你就惨了。。。code

 

 

 

 

 

 

 

Top


blog

相关文章
相关标签/搜索