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

나는 생각보다 후 논리적이다. 주방장처럼 요리를하고 나중에 청소하십시오. –