是否可以在文件上显示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;功能
答案 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数据
为了节省磁盘效率。