(o° v °)freopen 的用法

在很多题目中,我们都要遇到需要打开文件的情况。现在我们来看一下如何使用 freopen 来打开文件。

首先,让我们来看一个例子:#20046. 「牛客CSP-J模拟赛3」A-有趣的游戏

#include 
int main() {
    FILE *fp;
    fp = freopen("game.in", "r", stdin);
    int s, a, b, c;
    s = a = b = c = 0;
    while (scanf("%1d", &s) == 1)
        if (s == 6)
            a++;
        else if (s == 0)
            b++;
        else if (s == 1)
            c++;
    fp = freopen("game.out", "w", stdout);
    if (a != 0 || b > c)
        printf("Alice");
    else
        printf("Bob");
    return 0;
}

我们来一行一行的看这些代码。

FILE *fp;

定义了一个 指向文件 的指针。你可以理解为我们输入输出时的“光标”。

fp = freopen("game.in", "r", stdin);

这句代码的意思是:我们先以 只读 方式以 标准输入流 打开文件 game.in ,然后将 fp 更新为 game.in 的“光标”,这样我们就能阅读 game.in 中的数据了。

接下来的不用管,我们来看下一句:

fp = freopen("game.out", "w", stdout);

这句代码的意思是:我们再以 只写 方式以 标准输出流 打开文件 game.out ,然后将 fp 更新为 game.out 的“光标,这样我们就能对 game.out 进行输入了。

除此之外没有任何需要注意的地方。

你大概也看到了,freopen 中的第一个元素是 文件名称 ,第二个元素是 打开方式 ,最后一个文件是 使用哪种标准流

总而言之,
freopen 的作用就是把 标准输入/输出流 stdin/stdout 重定向到文件中,这样在输入或输出时便不会从 标准输入/输出流 读取/写入 数据,而是 从文件中读取/写入 数据。

附录一

fclose 是文件关闭函数,使用时只要将重定向的指针作为参数即可。比如:

fclose(fp);

附录二

打开方式可选的如下:
(o° v °)freopen 的用法_第1张图片

附录三

一些特殊文件:

CON            控制台(重定向至标准输入输出流)
DEL            删除文件(竞赛不可用)
NUL            空文件
HD             硬盘(竞赛不可用)
HDA            第一个硬盘(竞赛不可用)
RAM            内存

因此,如果在文件输入输出后还要进行标准输入输出,就可以这么写:

freopen("CON", "r", stdin);
freopen("CON", "w", stdout);

你可能感兴趣的:(C++,c++)