使用filestream实现高分

时间:2012-03-11 16:56:31

标签: c++ filestream

我正在使用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

1 个答案:

答案 0 :(得分:1)

一些注意事项:

while( !scorelist.eof() )几乎不是你想要的。在第一次读取错误后设置istream::eof(),因此在循环开始时检查istream::eof()意味着输入循环,读取所有数据,然后进行处理。然后,当到达eof时,不是读取数据,而是设置标志(在读取功能中)。然后完成所有处理(因为循环没有中止),然后最终看到标志。这通常会导致文件的最后一行被写入两次。

除此之外,您的代码LoadScores()已被注释掉。如果这是您正在使用的实际代码,那么这就是您的问题。如果它不是您正在使用的实际代码,请更新您的问题,我将再看看。