文件重定向和本地操作



使用方法

标准格式:FILE *freopen (const char *path, const char *mode, FILE *stream)

常用方法:

  • freopen(“input.txt”, “r”, stdin);
  • freopen(“output.txt”, “w”, stdout);
  • freopen(“C:\\Users\\dragonylee\\Desktop\\input.txt”, “r”, stdin);

简介:

  • path用于定义重定向后输入输出的文件名,可以使用绝对路径或者相对路径。绝对路径如上第三种例子所用(想想为什么要用两个\),直接重定向至路径所指文件;相对路径如上第一种例子,重定向至当前程序所在路径的那个文件。
  • mode用于定义打开文件的方式,常用的是"r"和"w",分别代表方式和方式。
  • stream为要替代的输入输出文件,常用的是stdin和stdout;其中stdin为标准输入(默认为键盘),stdout为标准输出(默认为屏幕);重定向的过程就是用path指定的文件流来替代标准流。

举个栗子

光这样说大家可能会觉得很抽象,不能理解重定向到底是怎么工作的。在这里我实际演示一下重定向的实现过程,顺便解释一下OJ上评测的机制,希望大家看的同时能够在自己电脑上跟着操作一下。

就拿多组数据a+b来吧,首先我们输入如下代码

#include <stdio.h>

int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
    int a,b;
    while(scanf("%d %d",&a,&b)!=EOF)
        printf("%d\n",a+b);

    return 0;
}

然后打开当前程序所在目录(这个很重要,因为现在用的是相对路径),创建两个记事本文件,分别命名为input.txt和output.txt(如果你们的电脑隐藏了后缀,命名就可以省略.txt),然后打开input.txt,输入你要给你的程序输入的数据,如下:

在这里插入图片描述

output.txt可以什么也不用动(动了其实也没关系)。

保存之后运行刚刚写的程序,运行完发现屏幕上啥输出也没有也不用输入,然后就结束了(这就是重定向的意义所在,把本来的标准输入输出分别重新定向到input.txt和output.txt),然后打开刚刚创建的output.txt文件,就会发现运行结果已经被保存在了这个文件中,如下:

在这里插入图片描述

这就是实现的全部过程,你们还可以试试绝对路径的写法,完全是一模一样的。

扫描二维码关注公众号,回复: 8699787 查看本文章

现在来解释一下OJ的运行机制。在OJ上,保存了所有的输入文件和标准答案,我们提交了代码之后,OJ就会运行我们的代码,然后拿准备好的输入文件作为程序的输入(这里可以理解为输入重定向到之前准备好的输入文件),我们的程序运行完之后的所有输出,也可以理解为被重定向到了一个输出文件output,程序运行完之后,OJ就拿我们的输出文件output和标准答案比对,判断是否正确。而你们看到的一个个的评测点,就对应了一个个的输入文件。

所以,理解了重定向和评测的具体实现之后,应该不难理解为什么 一个一个读入一个一个输出 和 全部读入一次性输出 是等价的了吧?

发布了12 篇原创文章 · 获赞 5 · 访问量 530

猜你喜欢

转载自blog.csdn.net/dragonylee/article/details/102740900