Pascal计算程序报exitcode 207无效浮点操作错误如何解决?
你触发exitcode 207的核心原因是运算代码的执行顺序完全错了,所有四则运算的计算逻辑都写在了读取用户输入a、b的前面,程序运行后会先拿未初始化的随机值计算a/b,这时候如果随机出来的b值为0,直接就触发了浮点错误,你后面加的除零判断、异常捕获逻辑都在运算之后,根本拦不住前面的报错。
修复步骤
- 把加减乘除的计算逻辑全部挪到
readln(b)之后,确保计算的时候a、b已经是用户输入的有效值 - 除法计算要放在除零判断的分支里,只有b不等于0的时候才执行
f := a / b的运算,不要提前算f的值
修正后完整代码
uses crt; var a, b, c, d, e, f : real; begin writeln(' Basic Math Operation '); writeln('Write First Number a '); readln(a); writeln('Write Second Number b '); readln(b); // 所有运算放在输入完成之后 c := a + b; d := a - b; e := a * b; writeln('The addition of a + b =', c); writeln('The substraction of a - b =', d); writeln('The multiplication of a x b =', e); // 先判断b是否为0,再决定要不要执行除法运算 if (b=0) then writeln(' Can''t do division by 0 !') else begin f := a / b; writeln('The division of a / b =', f); end; readln; end.
额外说明
你之前尝试的异常捕获没有生效有两个原因:一是运算逻辑在捕获代码之前就已经执行报错了,二是EDivByZero一般是整数除法的异常类,你用的是real类型的浮点除法,对应的异常类是EInvalidOp,且需要用try...except块包裹运算逻辑才能生效,按上面的方案调整执行顺序+前置除零判断就足够解决问题,不需要额外加异常捕获。
内容的提问来源于stack exchange,提问作者Aji Wibowo
相关产品推荐
相关产品推荐

