算法比赛中的输入输出框架
标准输入输出
标准输入输出就是控制台输入输出,在c语言中使用scanf()
和printf()
两个函数即可实现;
文件重定向输入输出
文件的重定向需要用到函数freopen()
, 在mian
函数的入口处使用该函数即可,一般的写法为:
1 2 3 4 5 6
| int main() { freopen("data.in", "r", stdin); freopen("data.out", "w", stdout); }
|
搭配使用#define LOCAL
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h> #define LOCAL int main() { #ifdef LOCAL freopen("data.in", "r", stdin); freopen("data.out", "w", stdout); #endif return 0; }
|
这种写法的效果是,当源文件开头没有写#define LOCAL
这一句的时候,#ifdef
和#endif
之间的代码将不被编译,所以使得重定向的方法可以在本地测试时使用
文件输入输出
文件输入输出涉及到FILE*
的使用,但是我们并不用关系为什么,可以直接使用,一般的写法为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #include <stdio.h> #define INF 100000000 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++; } fprintf(fout,"%d %d %.3f\n", min, max, (double)s/n); fclose(fin); fclose(fout); return 0; }
|
文件输入输出很容易切换成标准输入输出,只需要将 fin = stdin;fout = out;
即可,不要调用fopen()
和fclose()
注意:如果使用fopen("con","r")
的方式打开标准输入输出,这种方法并不是可移植的—在Linux下无效