导航菜单

信息学奥赛中freopen的使用

在某些比赛中,会让选手从指定的文件中读入数据,然后把结果输出到指定文件中。C 语言提供了fopen函数,打开一个文件得到其文件指针,然后进行各种文件 I/O 的操作;C++ 中的文件流对象fstream也能进行文件 I/O 的操作。

上述这些方式在竞赛中都不常用,使用文件最简单的方式是输入输重定向 freopen 函数。

freopen的三个参数:

第一个参数表示需要重定向到的文件路径,如果和程序放在统一路径下,就只要给出文件名。 第二个参数表示访问方式,r表示读,w表示写。 第三个参数表示被重定向的文件流,stdin为标准输入,stdout为标准输出。

在 OI 比赛中,一般会规定输入输出的文件,你只需在开头加上两行freopen语句,后续的习题也会采用这种方式。

#include using namespace std;int main() { freopen("test.in", "r", stdin);freopen("test.out", "w", stdout); return 0;}

接下来,只需要正常使用 cin/cout 或 scanf/printf 就可以正常答题了。

freopen 可以打开本地的文件,例如 OI 比赛中会给大的测试用例,我们就可以使用 freopen 来进行数据读取。

在 CSP 比赛中,比赛会给选手提供大用例,我们可以通过 freopen 函数,来完成数据的测试。

有同学询问freopen 的使用方法,我在此对上课内容作总结回答。

OJ 做题是唯结果论的,主要分两步:(1)猜测后台数据是什么;(2)如何快速找到速度和时间在规定范围内的解题方法。

freopen 是将原本需要从键盘(stdin)导入或导出到屏幕(stdout)的文本,重定向到文件中,便于编辑和阅读。因此可以利用freopen 生成测试输入文件,利用freopen 将输入文件导入到程序中,利用freopen 将输出导出到文件中,便于阅读比较。

我们以“寻找第二大的数”题为例,题意大致为寻找给定四个数中第二大的数(即小于最大值的数中最大的数),如果四个数相同则输出该数。

初步测试为样例输入的测试。由于样例输入字符较多,测试又需要反复进行,人工输入耗时费力。可以将测试文件下载下来(“样例输入”标题后有下载图标),在程序中使用“freopen(“in.txt”,“r”,stdin);”将输入导向文

相关推荐: