2014-05-24 3 views
0

파일에 게임 라운드 수를 저장합니다. 나는 그런 점수를 등록하는 파일은 다음과 같다 :문자열과 정수 모두를 포함한 파일을 다른 파일에 복사했는데 역순으로 복사합니다.

James 10 

제임스가 10에서, 점수가 다시 시작을한다,이 같은 예를 들어,에 저장되어 다음 번 :

James 10 
James 20 

세 번 째는 제임스가 연주하고 점수는 20에서 10으로 다시 시작됩니다. 가능한 해결책이 있습니까? 나는 새로운 파일을 역순으로 만들려고 생각했다. 그러나 나는 그렇게하는 법을 모른다. 나는 개인의 최신 점수로 나의 게임을 다시 시작하고 싶다. 어떤 도움이나 제안을 주시면 감사하겠습니다.

점수와 관련된 부분 만 붙여 넣습니다. 누구든지 더 많은 코드가 필요하면 알려주십시오.

cout << "Please enter your name : "; 
    getline(cin, name); 
    ifstream inFile("Scores.txt", ios::in); 
    if(inFile.is_open()) { 

     while(!inFile.eof()) 
     { 
      string temp; 
      int sc; 
      inFile >> temp; 
      inFile >> sc; 
      if(temp == name) { 
       score = sc; 
       break; 
      } 
     } 
    } 
+0

역순으로 쓰는 것이 왜 유용할까요? 확실히 당신이 원하는 것은 각 플레이어의 이름과 점수를 정확하게 저장하는 것입니다. – ClickRick

+0

그래, 나는 그것을 시도했지만 작동하지 않아서 나는 그것을 뒤집을 생각을했고 처음부터 다시 읽게 될 것이고, 최신 점수가 먼저 읽혀질 것이다. 점수를 덮어 쓰는 것은 저와 함께 작동하지 않았습니다. – user3668566

+0

void WriteScore (문자열 이름) { \t ofstream outFile ("Scores.txt", ios :: app | ios :: out); \t outFile << name << ""<< score << endl; \t outFile.flush(); \t outFile.close(); } – user3668566

답변

3

역순으로 쓰지 않아도됩니다.
score=sc; 후에 break;을 삭제하면 플레이어의 최신 점수를 받게됩니다.

0

점수를 추적하는 방식을 변경하지 않는 이유는 무엇입니까? 여기 내 제안이다 : 사용자 당

  1. 스토어 만 한 줄
  2. 새로운 사용자가이 같은 처음 저장 뭔가 게임을 재생하는 경우 행은 다음 "<username> <initial_score> <best_score>"
  3. 과 같습니다 "bob 10 10"

여기서 유일한주의 사항은 텍스트 파일에서 bob에 대한 레코드를 편집 할 수 있어야한다는 것입니다. 일반적으로 시작시 파일을 "데이터베이스"로로드 한 다음 작업이 발생하면 메모리의 db를 수정합니다 파일을 보면서 플러시하는 동안 적합).

편집 : 게으른 솔루션 :

lazier 솔루션은 말미에 추가해, 맹목적으로, bob의 마지막 점수를 읽고 파일에 새 항목을 만들고 참여한다. 최고 점수를 찾을 때이 방법을 사용하면 끝에서 시작하여 시작하여 bob에 대한 마지막 항목을 찾을 수 있습니다.

여기 근본적인 문제는 하나의 패턴을 사용하여 두 가지 별개의 것들 (초기 점수 및 최고 점수)을 추적하려고한다는 것입니다.