信息
我的c ++程序没有完整的程序优化,具有多字节字符集,并且启用了具有SEH异常(/ EHa)的C ++异常。
以下代码读取信息,然后在简单的数学公式中使用读取信息来确定结果。
问题
这是一个发生情况的例子!
为了论证,下面将显示预定的整数值,然后是使用这些值执行代码时的逻辑。
healthalert = 19;
healthpercentage = 0; //问题在这里
health = 840;
fixedhealth = 840; //这应该是885而不是840; 840因为健康状况应该是0,因为它应该是!
因此,在确定healthalert值的第一行代码中,该值设置为19.
但是,当计算healthpercentage的等式时,即使healthalert设置为19,healthpercentage的结果为零?!?!?!?!!?这是为什么?
然后执行下一行,健康值为840。
最后,固定健康的价值也是840;然而,情况应该不是这样,因为它应该在885左右。固定健康是840的原因是由于健康百分比的数学公式在不应该出现时为0!
请帮忙!
答案 0 :(得分:2)
你没有给出变量类型,但我敢打赌它们是整数。在这种情况下,你正在进行整数除法,它会截断任何小数部分。
healthpercentage = (20 - healthalert) / healthalert * 100;
healthpercentage = (20 - 19) / 19 * 100;
healthpercentage = (int)(1 / 19) * 100;
healthpercentage = 0 * 100;
healthpercentage = 0;
如果要继续使用整数,请重新排序操作,因此乘法是第一个:
healthpercentage = (20 - healthalert) * 100 / healthalert;
healthpercentage = (20 - 19) * 100 / 19;
healthpercentage = 1 * 100 / 19;
healthpercentage = (int)(100 / 19);
healthpercentage = 5;
当然,即使这样,数字与你指定的数字不符,所以我不理解你的数学。但是,这或许会让你走上正轨。
答案 1 :(得分:2)
你提到了SEH异常,但它看起来像是一个简单的整数除法。你说healthalert是19.因此20 - healthalert是1.因此,(20 - healthAlert)/ 20 零,因为所涉及的所有数字都是整数。将20更改为20.0,然后在最后转换回int,你应该没事。
编辑:或者在我点击提交前几秒钟做暗隼的建议。 :)