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语言计算代码执行所耗CPU时钟周期

    C语言计算代码执行所耗CPU时钟周期

    本文给大家介绍的是使用C语言来计算代码执行所耗CPU时钟周期的代码,非常的简单实用,不过要依托于sync,有需要的小伙伴自己参考下吧。
    2015-03-03
  • C++迭代器iterator详解

    C++迭代器iterator详解

    这篇文章主要为大家详细介绍了C++迭代器模式Iterator,具有一定的参考价值,感兴趣的小伙伴们可以参考一下希望能给你带来帮助
    2021-08-08
  • C语言结构体嵌套与对齐超详细讲解

    C语言结构体嵌套与对齐超详细讲解

    这篇文章主要介绍了C语言结构体嵌套与对齐,C语言中结构体是一种构造类型,和数组、基本数据类型一样,可以定义指向该种类型的指针。结构体指针的定义类似其他基本数据类型的定义
    2022-12-12
  • C语言手写多级时间轮定时器

    C语言手写多级时间轮定时器

    这篇文章主要为大家详细介绍了如何利用C语言实现手写多级时间轮定时器,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2022-09-09
  • C语言二叉排序树的创建,插入和删除

    C语言二叉排序树的创建,插入和删除

    本文主要介绍了Java实现二叉排序树的查找、插入、删除、遍历等内容。具有很好的参考价值,下面跟着小编一起来看下吧
    2021-10-10
  • EasyC++单独编译

    EasyC++单独编译

    这篇文章主要介绍了EasyC++单独编译,在上一篇当中,我们编写好了头文件coordin.h,现在我们要完成它的实现。需要的小伙伴可以先学习上一篇内容然后一起与小编一起进入本篇内容一起学习吧
    2021-12-12
  • C++基础知识之运算符重载详解

    C++基础知识之运算符重载详解

    这篇文章主要为大家详细介绍了C++基础知识之运算符重载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C++中stack、queue、vector的用法详解

    C++中stack、queue、vector的用法详解

    本文通过实例代码给大家介绍了C++中stack、queue、vector的用法,需要的朋友参考下吧
    2017-08-08
  • C++函数重载与引用实战案例详解

    C++函数重载与引用实战案例详解

    在C++中允许多个函数同名,只要参数列表不同,借助函数重载,一个函数名可有多种用途,使命名更方便、调用更灵活,这篇文章主要介绍了C++函数重载与引用的相关资料,需要的朋友可以参考下
    2025-08-08
  • C语言实现简单三子棋小游戏

    C语言实现简单三子棋小游戏

    这篇文章主要为大家详细介绍了C语言实现简单三子棋小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论