2013-04-15 141 views
0

我知道這篇文章是在堆棧溢出之前做出的,我已經結合了各種教程;但爲什麼這個代碼會導致執行錯誤 - 它會編譯。次C++讀取txt文件的CSV值

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

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

什麼是錯誤? – jrd1

+0

那會是什麼樣的錯誤先生? – Sinkingpoint

+0

「Labyrinth.exe中0x75BFC41F的第一次機會異常:Microsoft C++異常:內存位置0x003EF298處的std :: out_of_range。」 –

回答

2

是載荷必須是

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

令人難以置信的是多少次重複這個錯誤。你在第二個while循環中實際得到了正確的答案,爲什麼第一個錯誤呢?

不幸的是,一些教程也得到了這個錯誤。

添加一個檢查確實在矢量中有三個項目也是明智的。像這樣的東西

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

這似乎是伎倆。 IYHO最好在閱讀該行開始時清除向量,或者在閱讀該行後閱讀該向量?你會說什麼更有效率? –

+0

@ConnorJackson我懷疑是否有任何效率差異。然而,一開始似乎更合乎邏輯。 – john

+0

看到我認爲之後更合乎邏輯。像廚師一樣,你做點什麼,然後再清理。 –