0

この投稿は以前にスタック オーバーフローで作成されたことを知っており、さまざまなチュートリアルを組み合わせました。しかし、なぜこのコードは実行時にエラーを引き起こすのですか - コンパイルします。

void leaderBoard::loadFromFile(void)
{
    string line;
    ifstream leaderBoardFile ("leaderboard.data");
    vector<string> playerInfoVector;
    if (leaderBoardFile.is_open())
    {
        while ( leaderBoardFile.good() )
        {
            playerInfoVector.clear();
            getline (leaderBoardFile,line);
            std::string input = line;
            std::istringstream ss(input);
            std::string token;
            //cout << line << endl;

            while(getline(ss, token, ',')) {
                //for current line;
                playerInfoVector.push_back(token);
            }

            string firstName = playerInfoVector.at(0);
            string stringAge = playerInfoVector.at(1);
            string stringScore = playerInfoVector.at(2);

            //int age;
            //stringstream(stringAge) >>    age;
            //int score;
            //stringstream(stringScore) >>  score;
            //addScore(firstName,age,score);
            ////stringstream(stringAge) >> age;

            ////Add text to vector (push back)
            playerInfoVector.clear();
        }
        leaderBoardFile.close();
    }

    else cout << "Unable to open file";
}
4

1 に答える 1

2

はい、何度も

    while ( leaderBoardFile.good() )
    {
        playerInfoVector.clear();
        getline (leaderBoardFile,line);

する必要があります

    while ( getline (leaderBoardFile,line) )
    {
        playerInfoVector.clear();

このエラーが何回繰り返されるかは信じられないほどです。実際には 2 番目の while ループで正しく理解できたのに、なぜ最初の while ループで間違っているのでしょうか?

残念ながら、一部のチュートリアルでもこれが間違っています。

ベクター内に実際に 3 つのアイテムがあることを確認するチェックを追加することも賢明です。このようなもの

        if (playerInfoVector.size() < 3)
        {
            cerr << "Not enough items in player info vector\n";
            exit(1);
        }
        string firstName = playerInfoVector.at(0);
        string stringAge = playerInfoVector.at(1);
        string stringScore = playerInfoVector.at(2);
于 2013-04-15T21:07:07.287 に答える