2016-02-27 166 views
-1

我一直在嘗試在遊戲中的文本文件中保存玩家的分數,但它並沒有這樣做。 這是我使用的代碼:數據沒有被保存在文本文件中(C++ Fstream庫)

//some code above 

std::fstream TextScore ("Ranking.txt"); 


// some code above 

if (Player->getFinal(Map) == true) 
    { 
     TextScore.open("Ranking.txt", ios::out); 
     TextScore << Player->getPoints(); 
     TextScore.close(); 
     //some code below 
    } 

然後我檢查的文本文件,並沒有什麼已經保存,該文件是空的。 我想知道我失蹤或做錯了什麼。

在此先感謝。

+1

你確定該語句甚至執行(即if條件滿足)嗎? – blazs

+0

它編譯,但文本文件保持空白,這意味着分數沒有被保存在文本文件中。 – Drako

+0

是的,它很滿意。 – Drako

回答

3
std::fstream TextScore ("Ranking.txt"); 

這會打開文件,就好像調用了TextScore.open("Ranking.txt"), std::ios::in|std::ios::out)一樣。

TextScore.open("Ranking.txt", std::ios::out); 

這會再次打開它。

如果文件已經存在,組合不起作用。第一次開放會成功,第二次會失敗。之後,所有I/O操作都將失敗。打開它只需一次,無論是在構造函數中還是在單獨的open調用中。最地道的C++的辦法是

{ 
    std::fstream TextScore ("Ranking.txt", std::ios::out); 
    TextScore << Player->getPoints(); 
} 

無需關閉文件明確感謝RAII。

+0

謝謝。它有效,但現在它覆蓋了分數。 – Drako

+0

我該如何解決這個問題? – Drako

+0

當然可以。你會期待什麼? –

1

打開兩次相同的文件肯定會導致問題。將TextScore的定義移至if聲明的正文中,以代替對TextScore.open()的呼叫。然後您可以刪除對TextScore.close()的呼叫;析構函數將關閉文件。

+0

謝謝。還有一個問題,分數被覆蓋,以致它只出現最後保存的分數。我該如何解決這個問題? – Drako

相關問題