合并输入和输出流

时间:2017-03-08 07:00:52

标签: c++ redirect input output

我想将输入和输出流组合到输出流中。 我的意思是,如果这是我的代码:

int num;
string str;
cout << "string: ";
cin >> str;
cout << "num: ";
cin >> num;
cout << "num is " << num << " str is " << str;

我将输入流重定向到包含以下内容的txt文件:

  嘿1

我的输出流将包含:

string: hey
num: 1
num is 1 str i hey

绝对:

string: num: num is 1 str is hey

在收到输入后,我不想在cin中输入每个变量。我希望它是自动的。

1 个答案:

答案 0 :(得分:0)

重载std :: istream :: operator&gt;&gt;对于包装类并执行您喜欢的操作:

// Example program
#include <istream>
#include <string>
#include <vector>

class AutoCinToCoutReader {
    public: 
        inline void write(const std::string& in) { std::cout << in << std::endl; }
};

std::istream& operator >> (std::istream& is, AutoCinToCoutReader& dt)  
{  
    std::string in;
    is >> in;
    dt.write(in);

    return is;  
}  

void read(const std::string& what, AutoCinToCoutReader& rd) {

    std::cout << what << ": ";
    std::cin  >> rd;
}

int main()
{
    AutoCinToCoutReader rd;

    std::vector<std::string> fields = { "Test1", "Test2" };

    for(const std::string& field : fields) {
        read(field, rd);
    }
}

更新

我能提供的最小的东西是:

// Example program
#include <string>
#include <vector>
#include <iostream>
#include <istream>
#include <ostream>

std::istream& operator >> (std::istream& is, std::ostream& os) {
    std::string in;
    is >> in;
    os << in << std::endl;
    return is;
}

void read(const std::string& what) {

    std::cout << what << ": ";
    std::cin  >> std::cout;
}

int main()
{

    std::vector<std::string> fields = { "Test1", "Test2" };

    for(const std::string& field : fields) {
        read(field);
    }
}

你无法立刻从cin写入cout。无论如何,你需要解决它。查看更新后的操作符,在存入cin后直接输出到cout。