C ++函数cout重定向到文件

时间:2015-04-23 01:29:14

标签: c++ file redirect cout

假设我有一个名为print的简单函数,其中一个循环使用cout将1-5打印到控制台。

有没有办法可以做类似的事情:

file << print ();

要将print的输出保存到文件中吗?显然假设我正确地使用ofstream和所有内容打开文件。

2 个答案:

答案 0 :(得分:2)

假设print是一个void函数,其输出硬编码为cout,则无法执行任何操作:输出将由执行环境控制。分配输出流(默认情况下为控制台或带有>myoutput.txt的文件重定向)。

如果您希望程序控制输出的位置,请将ostream&传递给print函数,并将其用于输出:

void print(ostream& ostr) {
    // use ostr instead of cout
    ostr << "hello, world!" << endl;
}

如果您希望print输出到控制台或默认输出,请致电

print(cout);

如果您希望它写入文件,请创建ofstream,然后将其传递给print

ofstream file("hello.txt");
print(file);

答案 1 :(得分:2)

&#34;有办法吗?&#34;:没有......不是没有改变print()和/或在呼叫者中添加更多代码。当你说...

file << print();

...发送到文件流的内容是print()返回的内容。正如您所说print()正在向std::cout发送所需的输出,返回值表面上似乎没有我们想要的任何内容file,所以除非它&# 39;是一个空字符串,调用者最好不要写file << print();

相反,在致电cout之前,来电者应将输出转移至fileprint()James' answer here显示如何完成此操作。