我开发了一个随机创建两个整数然后添加它们的应用程序。两个整数的总和必须由用户计算并输入TEdit。 当我使用if语句来验证答案时(在TEdt中)我得到一个错误。 代码剪断了:
answer := int1+int2;
UserAnswer:=StrToInt(edtAnswer.Text);
if(UserAnswer=answer)then
lblRemark.Caption:= 'Correct Answer';
运行应用程序时,我得到一个convertError"错误...不是一个有效的整数"。
答案 0 :(得分:3)
当StrToInt
遇到无法转换为整数的字符串时,会引发异常。 documentation说:
如果
S
不代表有效号码,StrToInt
会引发EConvertError
例外。
你可以抓住那个例外。
try
Value := StrToInt(Str);
except
on EConvertError do
// handle conversion error
end;
然而,这是相当混乱的代码。作为一个广泛的规则,例外应该是例外。它们不应该是程序正常流程的一部分。另一个广泛的规则是你不应该处理异常。让它们向上传播到可以处理它们的东西。
所以,如果我们违反这两条规则,我们怎能做得更好?好吧,使用TryStrToInt
。这是一个返回Boolean
的函数,用于指示转换是否成功。代码将如下所示:
if TryStrToInt(Str, Value) then
// handle conversion success by using Value
else
// handle conversion error
答案 1 :(得分:0)
假设Int1和Int2对用户来说是“合理的”(例如只有正面),你也可以使用
值:= StrToIntDef(Str,-1 {或其他非法值});
使代码稍微简单一些。