C++中重定向的两种方法
作者:斯文小提莫
本文简明介绍了C语言中的输入输出重定向技术,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
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>
int main()
{
// 输出重定向:printf不再打印屏幕,写入out.txt
freopen("out.txt", "w", stdout);
printf("这段文字不会出现在屏幕,保存到文件!\n");
// 恢复回屏幕输出(可选)
// freopen("CON", "w", stdout);
return 0;
}
输入重定向示例:
// scanf 不再读键盘,读取 in.txt
freopen("in.txt", "r", stdin);
⚠️ Windows 恢复控制台:freopen("CON","r",stdin)
Linux 恢复控制台:freopen("/dev/tty","r",stdin)
重定向只是改变数据流方向
程序里 printf/scanf 写法完全不用变,代码无需改动读写逻辑。
程序自身“感觉”还是在和键盘、屏幕交互,底层被转发到文件。和直接 fopen/fprintf 的区别
- fopen:你主动创建文件指针 FILE* fp,使用 fprintf(fp, ...);
- 重定向:不改原有printf代码,劫持全局stdin/stdout。
5、典型使用场景
- OJ算法刷题:本地测试,不用手动输入一堆数据;
- 程序日志快速导出到文件;
- 批量测试,自动读取测试用例。
6、常见坑
- freopen 失败不会报错,记得判断返回值;
- 程序结束前如果需要恢复控制台输出,要手动恢复;
- 多次freopen容易造成流泄露。
极简一句话总结
重定向:不改printf/scanf代码,把本该屏幕、键盘的数据,转移到文件中读写。
到此这篇关于C++中重定向的两种方法的文章就介绍到这了,更多相关C++ 重定向内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
