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 简化文件输入/输出,但需注意平台差异。
相关推荐
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
weilx12343 天前
C++笔记-文件IO-<fcntl.h>
c++
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
Smileyqp沛沛3 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光3 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·3 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven3 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法