要学习C ++,我会关注一个在线课程,并且我正在尝试创建一个控制台模式游戏。 游戏采用随机单词,分割单词并要求用户猜出单词。
当用户不想再玩并退出游戏时,我的程序会显示一些统计数据(游戏总数,游戏胜利......)。 虽然我试图获得胜率,但我得错了结果。
解释(我想要什么):
我的用户赢了1场比赛并输了1场比赛 - > 1/2 * 100 = 50%(胜率)
出了什么问题(我得到了什么):
我的函数返回0表示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
。
此行float(gameWin / gameNumber)
表示在integer
空格中划分,然后将结果转换为float
空格。
你应该这样做:
float(gameWin) / gameNumber
甚至更好:
static_cast<float>(gameWin)/ gameNumber
答案 1 :(得分:3)
当您执行float(gameWin / gameNumber)
时,除法仍然是整数除法。您需要将一个操作数转换为浮点数,例如float(gameWin) / gameNumber
。
另请注意,除非您使用的是小型嵌入式平台,或者编写代码才能在GPU上运行,否则这些天真的没有理由使用float
。使用double
和使用float
一样“快”,double
也是默认的浮点类型(例如使用浮点文字时)。