我正在使用OpenGL用C ++编写游戏,但我无法使用文件流将分数导入文件并将其导出到要显示的程序中。
我有以下功能来导入和导出高分:(有些代码是我试图调试问题)
void DisplayScores(void) // is going to be called by LoadHighScores()
{
glRasterPos2i(HighScore::x, HighScore::y);
printString(lineholder);
HighScore::y -= 15;
std::cout << "lineholder before being cleared: " << lineholder << std::endl;
lineholder = "";
}
void LoadScores(void) // Loads the high scores // called when the high scores option on the main menu has been selected
{
std::ifstream scorelist("scorelist.txt");
while (!scorelist.eof())
{
scorelist.get(getletter);
switch(getletter)
{
case '\n': DisplayScores(); break;
default: lineholder = lineholder + getletter; break;
}
}
scorelist.close();
}
void AddScore(char* name, int score) // takes arguments of the name of the player who has just played the game and their score is also passed and copied to the config file
{
std::ofstream addscore("scorelist.txt", std::ios::app);
addscore << name; // name of the player achieving the score
addscore << ":"; // if addscore.get() == ':' you know the score is going to come after this
addscore << score;
addscore << std::endl; // end the line in the text file so when you encounter '\n' you know you need to translate to a new line to display someone elses score
addscore.close();
}
以及使用这些函数的以下代码:(如果未选择“Play”,则else语句是主菜单分支的一部分)
else
{
// display the high scores here
std::cout << "in the else statement";
LoadScores();
AddScore("this", 20);
}
当我构建程序时,我只是得到“在else语句中”,但没有任何内容写入得分文件,并且DisplayScores()似乎也没有被调用。
文本文件只包含以下内容:
Nick 10
Jason 50
答案 0 :(得分:1)
一些注意事项:
while( !scorelist.eof() )
几乎不是你想要的。在第一次读取错误后设置istream::eof()
,因此在循环开始时检查istream::eof()
意味着输入循环,读取所有数据,然后进行处理。然后,当到达eof
时,不是读取数据,而是设置标志(在读取功能中)。然后完成所有处理(因为循环没有中止),然后最终看到标志。这通常会导致文件的最后一行被写入两次。
除此之外,您的代码LoadScores()
已被注释掉。如果这是您正在使用的实际代码,那么这就是您的问题。如果它不是您正在使用的实际代码,请更新您的问题,我将再看看。