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 简化文件输入/输出,但需注意平台差异。
相关推荐
爱写Bug的浮游8 小时前
unique_ptr 零开销的真相与边界
c++·facebook
Pniubi8 小时前
Java为什么要分堆和栈
java·开发语言
xiaoye-duck8 小时前
《C++ 项目:手写大模型接入 SDK》ChatGPT接口设计(下):流式响应实现和测试
网络·c++·语言模型·chatgpt
小小晓.9 小时前
Qt 对话框、QLineEdit 与布局管理实战详解
开发语言·qt
炸薯条!9 小时前
博客系统测试报告
开发语言·lua
Evand J9 小时前
【MATLAB例程12】永磁同步电机基于增广无迹卡尔曼滤波的未知负载转矩在线观测
开发语言·matlab
落樱弥城10 小时前
Perf 逐步探查性能缺口并优化
c++·性能优化
坤坤子吖10 小时前
Linux网络编程:UDP进阶,从字典服务器到简单聊天室
linux·服务器·网络·c++·笔记·学习
Rabitebla10 小时前
【Linux学习笔记】进程篇(九):进程的创建与退出——fork、写时拷贝与退出码
linux·c++·笔记·学习
时间的拾荒人10 小时前
CMake 实战指南:从基础语法到静态库/动态库制作与链接
开发语言·c++·面试