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

一 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. Android串口开发

    参考资料: https://www.jianshu.com/p/9249ed03e745 GitHUb地址: https://github.com/AIlll/AndroidSerialPort An ...

  2. OSXFUSE file system is not available 解决方法

    操作系统版本:10.14 macos mojeva 今天用truecrypt加载加密盘时候提示次错误:用window加载也有错误,不过用windows自带的工具检查修复了错误. 解决办法: 1.访问h ...

  3. vcenter 忘记 administrator@vsphere.local 密码怎么办

    现有一个windows版本的vcenter5.5管理员密码丢失,我们可以使用vmware的工具vdcadmintool,在命令行进入到vdcadmintool所在的目录,然后执行下vdcadminto ...

  4. ubuntu18.04安装spark(伪分布式)

    在安装spark之前,首先需要安装配置Hadoop,这个就不做详细介绍了,可以参看博主的另一篇: https://blog.csdn.net/weixin_42001089/article/detai ...

  5. 【vue】使用vue+element搭建项目,Tree树形控件使用

    1.依赖安装 本例中,使用render-content进行树节点内容的自定义,因此需要支持JSX语法.(见参考资料第3个) 在Git bash中运行一下指令 cnpm install\ babel-p ...

  6. 破解idea地址

    https://blog.csdn.net/animatecat/article/details/81483174

  7. 【动态规划】 EditDistance

    思路参考: https://www.cnblogs.com/littlepanpc/p/7895810.html 代码参考:https://leetcode.com/problems/edit-dis ...

  8. Iterator和Enumeration的区别

    从源码可以看出,Iterator除了能读取集合的数据之外,也能数据进行删除操作:而Enumeration只能读取集合的数据,而不能对数据进行修改. Iterator支持fail-fast机制,而Enu ...

  9. seaborn库

      首先找到Anaconda Prompt命令行,下载seaborn库 ,命令  pip install seaborn 1.风格设置 import seaborn as sns import num ...

  10. codeforces305A

    Strange Addition CodeForces - 305A Unfortunately, Vasya can only sum pairs of integers (a, b), such ...