SEH例外是我的程序逻辑错误吗?

时间:2014-04-23 14:10:23

标签: c

信息

我的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!

请帮忙!

2 个答案:

答案 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,你应该没事。

编辑:或者在我点击提交前几秒钟做暗隼的建议。 :)