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 :需要重定向的流(stdinstdoutstderr)。
  • 返回值 :成功时返回流的指针,失败时返回 NULL

常见用途

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

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

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

此后所有 printfcout 操作将写入 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 简化文件输入/输出,但需注意平台差异。
相关推荐
影视飓风TIM17 分钟前
C++哈希表深度剖析:冲突处理、rehash、迭代器与unordered容器封装
c++·哈希算法·散列表
传奇开心果编程21 分钟前
【Rust入门知识点学与练】第5课:函数
开发语言·学习·rust
秋田君25 分钟前
Qt_QMediaPlayer类与QMediaPlaylist类
开发语言·qt
统计学小王子32 分钟前
数学建模国赛倒计时6天——《软件工具(R语言精讲)》
开发语言·数学建模·r语言
C++ 老炮儿的技术栈34 分钟前
Qt5 使用 QPainter 绘制阿基米德螺线
开发语言·c++·windows·qt·代码化
EasyGBS42 分钟前
从接入到稳定播放:无插件直播H5视频流媒体播放器EasyPlayer.js如何撑起Web端流媒体
开发语言·前端·javascript
FfHUCisI44 分钟前
GMP 调度器:Go 并发的心脏是如何跳动的
开发语言·golang·php
Java小白笔记1 小时前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
传奇开心果编程1 小时前
【Rust入门知识点学与练】第9课:Vec 动态数组
开发语言·学习·rust
卢锡荣1 小时前
单芯掌控多口互联|乐得瑞 LDR6020 PD3.1 多通道 Type‑C 控制 SOC 芯片
c语言·开发语言