是否可以在C ++文件中显示void function cout输出?

时间:2014-10-05 04:45:44

标签: c++ file function void cout

是否可以在文件上显示cout输出而不是在控制台/终端中显示?

#include <iostream>
#include <fstream>

void showhello()
{
    cout << "Hello World" << endl;
}

int main(int argc, const char** argv)
{
    ofstream fw;
    fw.open("text.txt");
    fw << showhello() << endl;
}

如果我只是把cout&lt;&lt; “Hello World”&lt;&lt; ENDL;在主要方面,它当然会在终端显示“Hello World”。 现在我不想在终端中显示它,而是想在text.txt文件中显示它。

限制: 假设函数showhello()包含一千个cout输出,所以你不能使用类似的东西:

fw << "Hello World" << endl;

或字符串中的复制粘贴。它必须是fw&lt;&lt;功能

2 个答案:

答案 0 :(得分:3)

您可以像以下一样重新指示:

std::streambuf *oldbuf = std::cout.rdbuf(); //save 
std::cout.rdbuf(fw.rdbuf()); 

showhello(); // Contents to cout will be written to text.txt

//reset back to standard input
std::cout.rdbuf(oldbuf);

答案 1 :(得分:3)

您可以将stream作为参数引用:

std::ostream& showhello(std::ostream& stream) {
    return stream << "Hello World";
}

//用法(我很惊讶它有效,谢谢@ T.C.)

ofstream fw;
fw.open("text.txt");
std::cout << showhello << '\n';

//替换地:

showhello(fw) << '\n';

我使用'\n'代替std::endl, 因为std::endl强迫冲洗溪流 当您写入控制台时,差异可能几乎无法察觉, 但是当你写入磁盘时,
它强制访问磁盘现在, 而不是等到有enoungh数据 为了节省磁盘效率。