2016-01-20 120 views
1

要學習C++,我遵循一個在線課程,我試圖創建一個控制檯模式的遊戲。 遊戲採取隨機單詞,分詞,並要求用戶猜測這個單詞。錯誤的結果,而試圖分裂

當用戶不想再玩並退出遊戲時,我的程序會顯示一些統計數據(玩過的遊戲總數,遊戲勝出......)。
雖然我想獲得勝利百分比,但我得到了錯誤的結果。

解釋(我想要什麼):
我的用戶贏得1場比賽,失去1個遊戲 - > 1/2 * 100 = 50%(勝率)

什麼是錯的(我能得到什麼):
1/2 * 100

void gameStatistics(int gameNumber, int gameWin, int defeats, int tries) 
{ 
    std::cout << "You quit." << std::endl; 
    float const winpercentage=float(gameWin/gameNumber) * 100; // C4244, resolved by casting the int into float. 
    std::cout << "Win average: " << winpercentage << std::endl; 
    std::cout << "Statistics: Number of games played: " << gameNumber << " Number of win: " << gameWin << " Number of defeat: " << defeats << " Number of tries: " << tries << std::endl; 
} 

我的函數返回0我一直在掙扎了一段時間,我需要有人來解釋我做錯了。 在此先感謝

回答

3

1/2 = 0整數邏輯。

1/2.0f = 0.5f in float logic。

這條線float(gameWin/gameNumber)意味着integer空間分然後將結果轉換爲float空間。

你應該這樣做:

float(gameWin)/gameNumber 

甚至更​​好:

static_cast<float>(gameWin)/ gameNumber 
+1

非常感謝你 – Sub

3

當你做float(gameWin/gameNumber)分工仍然是整數師。您需要將一個一個作爲浮點數運算,如float(gameWin)/gameNumber

另請注意,除非您在一個小型嵌入式平臺上,或者編寫代碼在GPU上運行,否則現在真的沒有理由使用float。使用double與使用float一樣「快」,並且double也是默認浮點類型(例如使用浮點文字時)。

+0

非常感謝你 – Sub