输出到递归函数中的文件

时间:2014-11-11 21:51:15

标签: c++ recursion

我有一个游戏锦标赛程序,以递归方式进行战斗并从玩家容器中删除玩家,直到只剩下1名玩家。这是纸牌游戏“战争”,每次战斗我需要将游戏中每场战斗的胜利者输出到一个文件中。例如,它看起来像这样

John vs James
    Battle 1: James wins
    Battle 2: John wins
    ...
    Battle 5: James wins, John is out of cards. James wins the game

但是由于这是一场锦标赛,约翰被从集装箱中移除,接下来的两个人一起战斗,所以我们从16到8到4到2个玩家,最后是胜利者。我已经有了所有的代码,我需要知道如何递归地执行这个部分:

ofstream outFile;
outFile.open(argv[2]);

outFile << player1Name << " vs. " << player2Name << endl;

outFile << "Battle" << //number battle & winner etc, etc

我想这样做,以便每次运行PROGRAM时,它都会覆盖文件中的所有内容,但每次在锦标赛中玩GAME时它只会添加到上一场战斗的结束。我有一些想法,但我不确定最好的方法是什么。我在考虑放

ofstream outFile;
outFile.open(argv[2]);

在driver.cpp文件中,然后调用递归函数game.tournament(),但将game.tournament(outFile)传递到void Game :: tournament(ofstream&amp; outFile),然后使用outFile&lt;&lt;语句和调用递归调用锦标赛(outFile),一旦递归函数结束,.close()文件回到driver.cpp中。这会以我认为的方式运作吗?就像它在驱动程序中打开和关闭一样,但我有权在递归函数中打印出来

同样要清楚的是,基本情况是当玩家的队列具有.size()&lt; 2,意味着它只剩下1个玩家,因此该玩家是赢家,这就是我的递归函数具有void返回值的原因。这不是我需要帮助的部分,但我想我会把它包含在人们想知道的情况下

1 个答案:

答案 0 :(得分:0)

在程序开始时,在调用递归之前打开你的文件

outFile.open(argv[2], std::ofstream::trunc);

这将截断文件中的所有内容,然后将其关闭。

接下来在你的递归函数中,打开文件以便像这样追加

outFile.open(filename, std::ofstream::app);

请参阅reference for ofstream here