当前位置: 代码网 > it编程>编程语言>C/C++ > C++中的freopen的用法实例详解

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

2026年04月03日 C/C++ 我要评论
介绍: freopen常用于比赛中,是文件输入输出的意思。写法: freopen("输入文件名”,“r”,stdin);freopen(&qu

介绍:

        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用法内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

  • C++四个智能指针的使用小结

    C++四个智能指针的使用小结

    一、先搞懂:为什么需要智能指针?c++ 原生指针(裸指针)最大的问题是手动管理内存容易出错,比如:忘记释放内存 → 内存泄漏;提前释放内存 &rarr... [阅读全文]
  • c++中多重继承与虚继承的实现

    c++中多重继承与虚继承的实现

    一、多重继承(multiple inheritance)1. 基本概念多重继承是指一个派生类同时继承多个基类,允许派生类复用多个基类的属性和方法,是c++区别于... [阅读全文]
  • Qt中导航栏实现的详细指南

    Qt中导航栏实现的详细指南

    简介:导航栏在qt框架中是用户界面设计的关键组件,为用户提供快速访问常用功能的途径。本文详细指导如何在qt中创建和配置qtoolbar类,包括添加动作、关联槽函... [阅读全文]
  • Qt侧边栏布局的实现示例

    Qt侧边栏布局的实现示例

    一、绪论现在的很多桌面端软件或后端管理系统等都有侧边导航栏,下面介绍一下如何用qt纯代码的形式实现。二、导航栏void mainwindow::createna... [阅读全文]
  • Qt中MVD模式的具体使用

    Qt中MVD模式的具体使用

    一、前言 mvd 模式的核心价值:关注点分离,让数据管理、显示逻辑和用户交互各自独立,从而创建出更可维护、可扩展的应用程序。model: 完全不知道数据会如何显... [阅读全文]
  • Qt中QStackedWidget的实现示例

    Qt中QStackedWidget的实现示例

    一、基本概念1.1 什么是 qstackedwidgetqstackedwidget是 qt 中的一个容器控件,它可以包含多个子控件(页面),但一次只显示其中一... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com