在刷题测试程序时,为了避免每次都手工输入,我们可以把输入数据保存在文件中;为了避免输出太长,我们将输出也写入文件中,方便与标准答案文件进行比较。
文件使用一般有两种方法:输入输出重定向、fopen。
- 重定向
这种方法比较简单,只要在main()函数的开始加上:
freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);
就可以将标准I/O(键盘输入、屏幕输出)转为读写文件。
万一比赛要求标准I/O,而你还想用文件操作来测试代码时,提交时切记删除重定向语句。
为了避免你忘记这茬,可以如下处理:
#define NATIVE #include <stdio.h> int main(int argc,char** argv) { #ifdef NATIVE freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif //your code here return 0; }
这样子,本机测试时可以使用重定向;如果要求标准I/O,提交时只需删掉#define NATIVE
即可。
- fopen
如果比赛要求使用文件读写,但禁止重定向方式,这时可以使用fopen方式:
#include <stdio.h> int main(int argc,char** argv) { FILE *fin, *fout; fin = fopen("input.txt"."rb"); fout = fopen("output.txt","wb"); int a; //把scanf改为fscanf,把printf改为fprintf fscanf(fin,"%d",&a); fprintf(fout,"%d",a); //your code here fclose(fin); fclose(fout); return 0; }
这时候,如果要求标准I/O,只需要:
fin = stdin;
fout = stdout;
最后,简单说下文件比较(windows下):
进入cmd,如果两个文件在同一目录:
fc 1.txt 2.txt
如果两个文件不在同一目录:
fc "c:1.txt" "d:2.txt"
可以使用fc /?
查看fc命令的一些参数: