вывод в файл в рекурсивной функции

0

У меня есть программа, которая является игровым турниром, который рекурсивно сражается и удаляет игроков из контейнера игрока, пока не останется только один игрок. Это карточная игра "Война", и для каждой битвы мне нужно вывести победителя каждой битвы в игре в файл. Так, например, это выглядело бы примерно так

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, он переопределяет все в файле, но каждый раз, когда игра проводится в турнире, она добавляется только к концу предыдущего боя. У меня есть несколько идей, но я не уверен, что лучший способ сделать это. Я думал о том, чтобы

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

В файле driver.cpp, вызывая рекурсивную функцию game.tournament(), но проходящую в game.tournament(outFile), в void Game :: tournament (ofstream & outFile), затем используя команды outFile << и вызов, выполняющий рекурсивный вызов турнира (outFile) и как только рекурсивная функция заканчивается,.close() файл обратно в driver.cpp. Будет ли это работать так, как я думаю? Так как в нем открывается и закрывается драйвер, но у меня есть доступ к его распечатке в рекурсивной функции

Также, чтобы быть ясным, базовый случай заключается в том, что в очереди игроков есть.size() <2, что означает, что в нем осталось только 1 игрок, и, таким образом, игрок является победителем, поэтому моя рекурсивная функция имеет возвращаемое значение void. Это не та часть, в которой мне нужна помощь, но я подумал, что я бы включил ее в случае, если люди задавались вопросом

Теги:
recursion

1 ответ

0

В начале вашей программы перед вызовом рекурсии откройте свой файл следующим образом:

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

Это приведет к усечению всего из файла, а затем закроет его.

Далее в вашей рекурсивной функции откройте файл для добавления

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

См. Ссылку для потока здесь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню