注:原创不易,转载请务必注明原作者和出处,感谢支持!

一 C/C++中的输入输出重定向

重定向在代码调试时使用有多频繁,相信经常刷算法题的同学一定深有体会。本文总结了在C和C++中进行输入输出重定向的简便方法。

1.1 C语言输入输出重定向

C语言标准库中提供了freopen()函数来进行输入输出的重定向。

函数原型:

#include <stdio.h>
FILE *freopen(const char *filename, const char *mode, FILE *stream);

功能:

  • 如果filename被指定,则函数将关闭与stream关联的文件,然后以mode模式打开文件filename并将其与stream进行关联。
  • 如果filename为空指针,则函数将stream以指定的mode更改stream的属性
  • freopen()尤其适合用来重定向预定义的文件流(stdin、stdout、stderr)

参数:

  • filename:包含文件名字符串的指针
  • mode的可能取值
    • r:读
    • w:写
    • a:追加(写)
    • r+:读写(文件必须已存在)
    • w+:读写(如果文件不存在则创建新空文件,如果已存在,则原文件内容将被丢弃!)
    • a+:追加(读写)
  • stream:文件流

返回值:如果重定向成功,则返回stream;否则,返回null

实例:

/* 将input.txt重定向到标准输入 */
freopen("input.txt", "r", stdin); /* 将标准输出重定向到output.txt */
freopen("output.txt", "w", stdout);

1.2 C++语言输入输出重定向

C++提供了rdbuf()函数来进行重定向,与上述C语言片段功能一样的C++代码如下所示:

#include <iostream>
#include <fstream>
using namespace std; int main(int argc, char ** argv)
{
// 备份cin和cout的默认buf
streambuf *cin_backup, *cout_backup;
cin_backup = cin.rdbuf();
cout_backup = cout.rdbuf(); // 打开要参与重定向的文件
fstream in, out;
in.open("in.txt", ios::in);
out.open("out.txt", ios::out);
if (in.fail() || out.fail())
return -1; // 将in.txt内容重定向到cin
// 将cout重定向到out.txt
cin.rdbuf(in.rdbuf());
cout.rdbuf(out.rdbuf()); int n;
cin >> n;
cout << n << endl; cin.rdbuf(cin_backup);
cout.rdbuf(cout_backup);
return 0;
}

参考资料

  1. C++ Reference

C/C++中的输入输出重定向的更多相关文章

  1. Shell 环境中的输入输出重定向

    Linux Shell 环境中的输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误. 1.重定向标准输出到文件: cat fo > foo.txt 2 ...

  2. 【转载】标准输入输出重定向(Visual C++)

    原文:标准输入输出重定向(Visual C++) 引言 本人偶得在 Visual C++ 中进行输入输出重定向的办法,比通常的做法“freopen”更加的灵活和方便,特在此共享.目前,代码正在不断地摸 ...

  3. 全面理解Linux输入输出重定向

    全面理解Linux输入输出重定向 本教程通过视频方式讲解shell操作,理解感念,教程通俗易懂,比起看一大堆文档要舒服的多.本次教程主要讲解  Linux Shell 中支持输入输出重定向,用符号&l ...

  4. C/C++ 标准输入输出重定向

    转载自:http://www.cnblogs.com/hjslovewcl/archive/2011/01/10/2314356.html 这个对经常在OJ上做题的童鞋们很有用.OJ基本都是用标准输入 ...

  5. Linux Shell系列教程之(十六) Shell输入输出重定向

    本文是Linux Shell系列教程的第(十六)篇,更多Linux Shell教程请看:Linux Shell系列教程 Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为 ...

  6. Linux学习笔记17——输入输出重定向

    1 何谓输入输出重定向? 默认情况下输入是由键盘输入的.输出是默认的输出到屏幕上.而输入输出重定向就是改变默认的输入输出方向 2 freopen函数 freopen是被包含与stdio.h头文件中,是 ...

  7. linux 输入输出重定向

    输入输出重定向 1,输入输出重定向,是针对过滤器的,不针对,编辑器和交互工具 2,>号只把正确的标准输出重定向,输出错误信息,可以用2> 3,新建或清空文件可以直接用>filenam ...

  8. shell之路【第四篇】输入输出重定向

    输出重定向 命令输出重定向的语法为: command > file 或 command >> file 这样,输出到显示器的内容就可以被重定向到文件.果不希望文件内容被覆盖,可以使用 ...

  9. 历史命令~/.bash_history,查看所有别名alias,命令执行顺序,命令行常用快捷键,输入输出重定向,wc统计字节单词行数

    历史命令大小:/etc/profile中字段HISTSIZE=1000 历史命令保存文件:~/.bash_history history -c 清空历史命令 history -w 把历史命令写入~/. ...

随机推荐

  1. Django项目结构介绍

    官网下载网址:https://www.djangoproject.com/download/ 安装(安装最新LTS版): pip3 install django==2.0.7 创建一个django项目 ...

  2. 从0开始的Python学习019更多的Python内容2

    书接上文,接演Python全传 话说学了这么多Python的基础知识,也该写一点让别人看不懂的代码了. lambda lambda表达式,是一个方法的简化形似,它没有自己的代码块,它后面的语句就是它的 ...

  3. Linux学习历程——SUID、SGID、SBIT简介

    一.SUID.SGID.SBIT简介 SUID:对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件的属主身份来执行.SGID:对一个可执行文件,不是以发起者身份来获取资源,而是以可执行文件 ...

  4. 记录Html+Css流程表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. js获取数组中最大值,最小值

    遍历方法 var arr =[12,14,34,566,34,98,77] var max = arr[0]; for(var i=0;i<arr.length;i++){ if(max< ...

  6. AngularJS路由变化 监听方法

    #使用AngularJS时,当路由发生改变时,我们需要做某些处理,此时可以监听路由事件,常用的是$routeStartChange, $routeChangeSuccess ##使用场景:在路由配置文 ...

  7. Jira安装过程

    一.下载jira jira下载路径:https://www.atlassian.com/software/jira/download 二.安装 jira安装一直下一步下一步即可 三.破解 E:\JIR ...

  8. Python开发【第十六篇】:AJAX全套(转)

    作者:武沛齐 出处:http://www.cnblogs.com/wupeiqi/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 概述 对于 ...

  9. Vue.js 2.x笔记:安装与起步(1)

    1. 环境准备 Vue是一套用于构建用户界面的渐进式框架,设计为可以自底向上逐层应用.Vue 的核心库只关注视图层. 安装Node.js,下载:https://nodejs.org/ 查看安装: $ ...

  10. Redis快问快答

    本随笔的回答来自 http://www.runoob.com/redis/redis-tutorial.html 另一个不错的教程: https://www.yiibai.com/redis/redi ...