C++中的freopen的用法实例详解

 更新时间:2026年04月03日 09:51:51   作者:xvhao2013  
freopen用于文件输入输出,重定向stdin、stdout或stderr,常见用途包括重定向输入输出到文件,避免手动修改代码,示例代码展示了如何使用freopen实现a+b程序,并强调了错误处理、文件关闭等注意事项,感兴趣的朋友跟随小编一起看看吧

介绍:

        freopen常用于比赛中,是文件输入输出的意思。

写法:

        freopen("输入文件名”,“r”,stdin);

        freopen("输出文件名”,“w”,stdout);

下面用freopen写一个a+b。

#include <bits/stdc++.h>
using namespace std;
int main(){
	freopen("1.in","r",stdin);
	freopen("1.out","w",stdout);
	int a,b;
	cin>>a>>b;
	cout<<a+b;
	return 0;
}

补充:

freopen 的基本概念

freopen 是 C/C++ 标准库中的一个函数,用于重定向标准输入(stdin)、标准输出(stdout)或标准错误(stderr)到指定的文件。通常在需要从文件读取输入或输出到文件时使用,避免手动修改大量代码中的输入/输出语句。

函数原型

FILE* freopen(const char* filename, const char* mode, FILE* stream);
  • filename:目标文件名。
  • mode:文件打开模式(如 "r" 为读,"w" 为写,"a" 为追加)。
  • stream:需要重定向的流(stdinstdoutstderr)。
  • 返回值:成功时返回流的指针,失败时返回 NULL

常见用途

重定向标准输入到文件
freopen("input.txt", "r", stdin);

此后所有 scanfcin 操作将从 input.txt 读取数据。

重定向标准输出到文件
freopen("output.txt", "w", stdout);

此后所有 printfcout 操作将写入 output.txt

示例代码

#include <cstdio>
int main() {
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    int a, b;
    scanf("%d%d", &a, &b);
    printf("%d\n", a + b);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

注意事项

  • 错误处理:检查 freopen 返回值是否为 NULL,避免文件打开失败导致未定义行为。
  • 恢复默认流:可通过重定向到 /dev/tty(Linux)或 CON(Windows)恢复控制台输入/输出。
  • 文件关闭:显式调用 fclose 关闭文件流,避免资源泄漏。

恢复标准流示例(Linux)

freopen("/dev/tty", "r", stdin);  // 恢复标准输入
freopen("/dev/tty", "w", stdout); // 恢复标准输出

兼容性问题

  • Windows 平台需使用 CON 代替 /dev/tty
  • 竞赛编程中常用 freopen 简化文件输入/输出,但需注意平台差异。

到此这篇关于C++中的freopen的用法实例详解的文章就介绍到这了,更多相关C++ freopen用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言 超详细讲解算法的时间复杂度和空间复杂度

    C语言 超详细讲解算法的时间复杂度和空间复杂度

    算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小
    2022-03-03
  • C++ Qt开发之使用QUdpSocket实现UDP网络通信

    C++ Qt开发之使用QUdpSocket实现UDP网络通信

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,本文主要介绍如何运用QUdpSocket组件实现基于UDP的网络通信功能,需要的可以参考下
    2024-03-03
  • c++中的string常用函数用法总结

    c++中的string常用函数用法总结

    以下是对c++中的string常用函数的用法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • C语言去除相邻重复字符函数的实现方法

    C语言去除相邻重复字符函数的实现方法

    这篇文章主要介绍了C语言去除相邻重复字符函数的实现方法的相关资料,实现去重字符串相邻重复的字符,不相邻的不用去重的功能,需要的朋友可以参考下
    2017-08-08
  • CreateThread()与beginthread()的区别详细解析

    CreateThread()与beginthread()的区别详细解析

    很多开发者不清楚这两者之间的关系,他们随意选一个函数来用,发现也没有什么大问题,于是就忙于解决更为紧迫的任务去了。等到有一天忽然发现一个程序运行时间很长的时候会有细微的内存泄露,开发者绝对不会想到是因为这两套函数用混的结果
    2013-09-09
  • C++迭代器删除元素避免索引混乱问题及分析

    C++迭代器删除元素避免索引混乱问题及分析

    C++中删除容器元素时,索引操作易因内存变化导致混乱,而迭代器通过动态感知容器结构变化,提供更安全的删除方式,正确实践是用erase()返回值更新迭代器,优先使用remove_if算法,避免手动调整索引,确保遍历安全与代码通用性
    2025-09-09
  • 利用rapidjson实现解析嵌套的json的方法示例

    利用rapidjson实现解析嵌套的json的方法示例

    今天小编就为大家分享一篇关于利用rapidjson实现解析嵌套的json的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-04-04
  • C++读入XML文件示例

    C++读入XML文件示例

    本篇文章主要介绍了C++读入XML文件,读取和设置xml配置文件是最常用的操作,TinyXML是一个开源的解析XML的C++解析库,感兴趣的小伙伴们可以参考一下。
    2016-12-12
  • C语言入门学习笔记之typedef简介

    C语言入门学习笔记之typedef简介

    typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,下面这篇文章主要给大家介绍了关于C语言入门学习笔记之typedef简介的相关资料,需要的朋友可以参考下
    2021-11-11
  • C++消息队列(定义,结构,如何创建,发送与接收)

    C++消息队列(定义,结构,如何创建,发送与接收)

    这篇文章主要介绍了C++消息队列(定义,结构,如何创建,发送与接收),消息队列是一种先进先出的队列型数据结构,实际上是系统内核中的一个内部链表
    2022-08-08

最新评论