zoukankan      html  css  js  c++  java
  • C/C++中的输入输出重定向


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

    一 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
  • 相关阅读:
    jQuery动态表格插件 AppendGrid
    JavaScript:用JS实现加载页面前弹出模态框
    JavaScript(select onchange)的网页跳转的简单实现
    jQuery DataTables的简单实现
    JavaScript 设计模式之命令模式
    JavaScript 设计模式之代理模式
    JavaScript 设计模式之工厂模式
    JavaScript 设计模式之建造者模式
    集群服务器消息通讯办法
    游戏服务器端开发的基本大纲
  • 原文地址:https://www.cnblogs.com/laizhenghong2012/p/10760253.html
Copyright © 2011-2022 走看看