我一直试图在游戏中以文本文件保存玩家的分数,但它没有这样做。 这是我正在使用的代码:
//some code above
std::fstream TextScore ("Ranking.txt");
// some code above
if (Player->getFinal(Map) == true)
{
TextScore.open("Ranking.txt", ios::out);
TextScore << Player->getPoints();
TextScore.close();
//some code below
}
然后我检查文本文件,没有保存任何内容,文件为空。 我想知道我错过了什么或做错了什么。
提前致谢。
答案 0 :(得分:3)
std::fstream TextScore ("Ranking.txt");
这会打开文件,就像调用TextScore.open("Ranking.txt"), std::ios::in|std::ios::out)
一样。
TextScore.open("Ranking.txt", std::ios::out);
这会再次打开它。
如果文件已存在,则该组合无效。第一次打开将成功,第二次打开将失败。之后,所有I / O操作都将失败。只需在构造函数中或在单独的open
调用中打开它一次。最惯用的C ++方式是
{
std::fstream TextScore ("Ranking.txt", std::ios::out);
TextScore << Player->getPoints();
}
由于RAII,无需明确关闭文件。
答案 1 :(得分:1)
两次打开同一个文件肯定会引起问题。将TextScore
的定义移到if
语句的正文中,而不是调用TextScore.open()
。然后你可以删除对TextScore.close()
的号召;析构函数将关闭文件。