打印到控制台然后创建文件并将控制台内容打印到文件中

时间:2015-11-18 04:35:48

标签: c++

#include <iostream>
#include <ostream>
#include <istream>
#include <ostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iomanip>

void GetOutputFileStream(std::ofstream * fout, std::string filename);
void PrintStatistics(std::ostream & fout,
int numUsed,
int numNew,
double newTotalPrice,
double newTotalMileage,
double usedTotalPrice,
double usedTotalMileage);

int main()
{


double newTotalPrice = 33333;
double newTotalMileage = 44444;
double usedTotalPrice = 22222;
double usedTotalMileage = 99999;
int numUsed = 2;
int numNew = 3;

std::ofstream fout; // 'f'ile out - fout
std::string filename = "statistics.txt";
GetOutputFileStream(&fout, filename);
// Print to screen
PrintStatistics(std::cout,
    numUsed,
    numNew,
    newTotalPrice,
    newTotalMileage,
    usedTotalPrice,
    usedTotalMileage);
// Print to file
PrintStatistics(fout,
    numUsed,
    numNew,
    newTotalPrice,
    newTotalMileage,
    usedTotalPrice,
    usedTotalMileage);



std::cout << "Press ENTER to continue";
std::cin.get();

return 0;
}

void GetOutputFileStream(std::ofstream * fout, std::string filename)
{
    fout->open(filename, std::ios::out);
}
void PrintStatistics(std::ostream & fout,
int numUsed,
int numNew,
double newTotalPrice,
double newTotalMileage,
double usedTotalPrice,
double usedTotalMileage)
{


}

我真的陷入了这个特定的分配部分,它需要我将简单文本打印到控制台然后创建一个文件(无论std :: string文件名可能在main中)并打印出来的内容控制台进入该文件。

我真的很困惑,因为这个函数需要ostream,它还需要使用任何文件名操作的函数(在这个例子中它的statistics.txt,只是为了测试函数是否正常工作)。 / p>

该功能是PrintStatistics。

我知道我可以使用cout打印到控制台上,然后我假设fout会打印到文本文件中,但事实并非如此。谁能指出我正确的方向?我是这个社区的新手,所以我希望我的问题有意义/代码清晰可辨。谢谢!

2 个答案:

答案 0 :(得分:0)

从概念上讲,ofstream来自ostream系统,允许您在ofstream被使用的任何地方使用ostream

虽然我没有对此进行测试,但您应该能够在使用输出文件方法中的fout作为打印方法的ostream参数的参数时离开。

由于foutostream的派生版本,因此打开的文件及其数据的内容将与其一起传递,这意味着ostream的参数是fstream {1}}类型,它将在文件而不是控制台中运行。

答案 1 :(得分:0)

在应用程序评估器的包装器中执行此类操作比在后者内部执行更常见。说,

<myApplication> <arguments> | tee <output_filename>

(在类似Linux的shell中)将控制台输出副本带到文件中。