简体   繁体   中英

C++ Read txt file CSV values

I know this post has been made before on stack overflow, and I have combined various tutorials; but why does this code cause an error on execution - it does compile.

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";
}

Yes loads of times

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

should be

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

It is incredible how many times this error is repeated. You actually got it right in your second while loop, so why wrong in the first one?

Unfortunately some tutorials also get this wrong.

It would also be sensible to add a check that you really do have three items in your vector. Something like this

        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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM