【C++】重定向是什么
2026/8/3 3:24:10 网站建设 项目流程

1、什么是标准输入输出

C 默认:

  • printf标准输出 stdout→ 默认打印到屏幕
  • scanf标准输入 stdin→ 默认从键盘读取

重定向 = 改变数据流的目的地/来源
不让程序读写屏幕、键盘,改成读写文件

分为两种:
操作系统Shell重定向(外部重定向,最常用)
C代码内部重定向(freopen,程序内部实现)


2. 第一种:命令行重定向(外部,不用改代码)

编译程序得到a.exe

# 把程序输出,从屏幕 → 写入output.txt./a.exe>output.txt# 从文件input.txt代替键盘输入./a.exe<input.txt# 输入文件,同时输出到文件./a.exe<input.txt>output.txt

>输出重定向
<输入重定向

✅优点:源代码完全不用修改

3. 第二种:代码内部重定向 freopen()

头文件:#include <stdio.h>

#include<stdio.h>intmain(){// 输出重定向:printf不再打印屏幕,写入out.txtfreopen("out.txt","w",stdout);printf("这段文字不会出现在屏幕,保存到文件!\n");// 恢复回屏幕输出(可选)// freopen("CON", "w", stdout);return0;}

输入重定向示例:

// scanf 不再读键盘,读取 in.txtfreopen("in.txt","r",stdin);

⚠️ Windows 恢复控制台:freopen("CON","r",stdin)
Linux 恢复控制台:freopen("/dev/tty","r",stdin)


4、核心概念区分(很多人混淆)

  1. 重定向只是改变数据流方向
    程序里printf/scanf写法完全不用变,代码无需改动读写逻辑。
    程序自身“感觉”还是在和键盘、屏幕交互,底层被转发到文件。

  2. 和直接fopen/fprintf的区别

  • fopen:你主动创建文件指针FILE* fp,使用fprintf(fp, ...)
  • 重定向:不改原有printf代码,劫持全局stdin/stdout。

5、典型使用场景

  1. OJ算法刷题:本地测试,不用手动输入一堆数据;
  2. 程序日志快速导出到文件;
  3. 批量测试,自动读取测试用例。

6、常见坑

  1. freopen失败不会报错,记得判断返回值;
  2. 程序结束前如果需要恢复控制台输出,要手动恢复;
  3. 多次freopen容易造成流泄露。

极简一句话总结

重定向:不改printf/scanf代码,把本该屏幕、键盘的数据,转移到文件中读写。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询