C++freopen的用法

介绍:

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

写法:

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

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

下面用freopen写一个a+b。

cpp 复制代码
#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)到指定的文件。通常在需要从文件读取输入或输出到文件时使用,避免手动修改大量代码中的输入/输出语句。

函数原型

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

常见用途

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

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

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

此后所有 printf 或 cout 操作将写入 output.txt。

示例代码

cpp 复制代码
#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)

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

兼容性问题

  • Windows 平台需使用 CON 代替 /dev/tty。
  • 竞赛编程中常用 freopen 简化文件输入/输出,但需注意平台差异。
相关推荐
死磕音视频12 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
WL学习笔记14 小时前
C & C++ 内存管理
c++·c++内存管理
顽疲15 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog15 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
宛 禾16 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
hetao173383717 小时前
联盟场-提高组-R7 & ZYZSC-S-Round 11
c++·算法
程序喵大人17 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
微三云 - 廖会灵 (私域系统开发)17 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
局部有解17 小时前
Hot100 - 三数之和
数据结构·c++·算法
学逆向的17 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全