2013-04-15 137 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

看到我认为之后更合乎逻辑。像厨师一样,你做点什么,然后再清理。 –