我正在尝试这个简单的程序来捕获异常。
成功捕获除零异常。但是,我似乎无法捕获整数溢出。
据我所知, SmallInt 类型整数会在+32767之后溢出,因为最大有符号值= 2 ^ 15 - 1(即+32767)。
以下是代码:
Program ss;
Var
Price, Qty: SmallInt;
Rate: Real;
Begin
Try
write('Enter Total price '); Readln(Price);
Write('Enter qty '); Readln(Qty);
Rate := Price / Qty;
Writeln('Single item = ', Rate:0:2);
except
On EDivByZero Do Writeln('qty must be a valid num above 0');
On EIntOverflow Do Writeln('too large')
end;
End.
但是,似乎溢出异常不被捕获。相反,溢出值被视为负数,代码继续,好像什么都没有错。
这是输出:
输入总价32768
输入数量1
单项= -32768.00
按任意键返回IDE
我在代码中做错了吗?在FreePascal中捕获整数溢出的正确方法是什么?
谢谢!
答案 0 :(得分:0)
您必须包含单元sysutils,因为它包含将最深层运行时错误更改为可捕获语言异常的代码