如何将方法中的cout输出输出到c ++中的ofstream文件中?

时间:2017-01-01 15:48:35

标签: c++

我有一个主要功能,可以在玩游戏时将数独游戏打印到控制台。我称之为印刷板方法,它输出电路板以及带有数字的2D阵列。我一直在修改游戏,以便在每次cout之后输出到文件:

cout << "puzzle created" << endl;
output << "puzzle created" << endl;

然后问题是当我尝试使用方法时出错:

sudoku.printBoard(); //method to print board to console

我不能简单地说:

output << sudoku.printBoard();

我不能说:

output << "number";     

在board.cpp文件中的方法中。

有没有人知道这方面的任何方式?

3 个答案:

答案 0 :(得分:3)

这是print()成员函数的问题,也是您不应该编写它们的原因。至少,不是这样的。你已经锁定了自己打印到 stdout ,现在你想要在其他地方打印,你就被卡住了。

相反,有一个函数打印,告诉它。这可能是 stdout 或文件或其他任何内容。

该函数将如下声明:

void printBoard(std::ostream& os);

在其定义中,您将使用os而不是std::cout

然后您的代码将如下所示:

sudoku.printBoard(std::cout);
sudoku.printBoard(output);

它有效,因为std::coutoutput都是std::ostream派生的类型。

如果你需要很多cout变体,并且你不想每次都提供参数,因为它变得混乱,只需提供一个重载:

void printBoard()
{
    printBoard(std::cout);
}

现在你仍然可以写:

sudoku.printBoard();

对于您的项目开发人员来说,这或多或少会让您有所决定。

如果您没有其他要打印的内容,那么这是sudoku类型中唯一的此类功能,更惯用的方法是为此创建operator<<类型:

std::ostream& operator<<(std::ostream& os, const SudokuBoard& board)
{
    board.printBoard(os);
    return os;
}

现在您可以像这样使用它:

std::cout << sudoku;
output << sudoku;

答案 1 :(得分:0)

传递ofstream作为您的功能的参考,或者只是从您的函数返回字符串并将其打印在main()或被调用函数中。

在第二种情况下你会这样

string f()
{
   ostringstream os;
   os<<"whatever I want to print in output";
   ....
   ...
   return os.str();
}
int main() or //womain() from wherever you call
{
   output<<f()<<endl;
}

答案 2 :(得分:0)

创建一个在构造函数中包含两个ostream的类。其中一个可以是std :: cout。将它们作为参考存储在类中。

创建输出流运算符(&lt;&lt;)并使用它们写入两个流。

要在其他类中使用它,请在构造函数中将其作为引用传递(查找依赖项注入)。