複賽注意事項:關於文件讀寫的格式

 

不管小學複賽,仍是初中、高中的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

相關文章
相關標籤/搜索