0%

算法比赛中的输入输出框架

算法比赛中的输入输出框架

标准输入输出

标准输入输出就是控制台输入输出,在c语言中使用scanf()printf() 两个函数即可实现;

文件重定向输入输出

文件的重定向需要用到函数freopen() , 在mian 函数的入口处使用该函数即可,一般的写法为:

1
2
3
4
5
6
int main()
{
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
}
// 程序最后的输入输出分别在data.in 和data.out 两个文件里

搭配使用#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) //这里的scanf变成了fscanf,并且多了一个参数fin
{
s += x;
if(x < min) min = x;
if(x > max) max = x;
n++;
}
fprintf(fout,"%d %d %.3f\n", min, max, (double)s/n);
//这里的printf变成了fprintf,并且多了一个参数fout
fclose(fin); //关闭文件
fclose(fout);//关闭文件
return 0;
}

文件输入输出很容易切换成标准输入输出,只需要将 fin = stdin;fout = out;即可,不要调用fopen()fclose()

注意:如果使用fopen("con","r")的方式打开标准输入输出,这种方法并不是可移植的—在Linux下无效