Lazarus程序出现"" is an invalid integer错误,求有效修复方法
问题解决:Lazarus Pascal中"" is an invalid integer错误
错误原因
- 当
Edit2或Edit3为空(即Edit2.Text = ''或Edit3.Text = '')时,StrToInt无法将空字符串转换为整数,直接抛出转换错误。 - 你提到将
StrToInt替换为FloatToString是完全错误的操作:FloatToString的作用是把浮点数转为字符串,和「字符串转整数」的需求完全不匹配,自然无法解决问题。
修复方案
方案1:用StrToIntDef处理空值/无效输入
StrToIntDef支持设置默认值,当输入为空或不是有效整数时,自动返回你指定的默认值(比如0),避免报错。修改后的Button1Click代码如下:
procedure TForm1.Button1Click(Sender: TObject); var conf, adult: Integer; pr:real; begin // 空值或无效输入时默认取0 adult := StrToIntDef(Edit2.Text, 0); conf := StrToIntDef(Edit3.Text, 0); // 同样用StrToFloatDef处理Edit4的空值问题 pr := StrToFloatDef(Edit4.Text, 0.0); If Peak1.Checked then pr := (adult * 8.95) + (conf * 6.45) else pr := (adult * 7.45) + (conf * 5.95); Edit4.Text := '£' + FloatToStr(pr); end;
方案2:先校验输入再转换
如果需要强制用户输入有效内容(而非用默认值),可以先判断输入是否为空,再做转换:
procedure TForm1.Button1Click(Sender: TObject); var conf, adult: Integer; pr:real; begin // 检查Edit2输入 if Trim(Edit2.Text) = '' then begin ShowMessage('请输入成人数量'); Edit2.SetFocus; Exit; end; // 检查Edit3输入 if Trim(Edit3.Text) = '' then begin ShowMessage('请输入儿童数量'); Edit3.SetFocus; Exit; end; try adult := StrToInt(Edit2.Text); conf := StrToInt(Edit3.Text); pr := StrToFloatDef(Edit4.Text, 0.0); except on E: EConvertError do begin ShowMessage('请输入有效的数字'); Exit; end; end; If Peak1.Checked then pr := (adult * 8.95) + (conf * 6.45) else pr := (adult * 7.45) + (conf * 5.95); Edit4.Text := '£' + FloatToStr(pr); end;
额外优化
观察代码逻辑,Edit4是用来显示计算结果的,初始读取它的内容没有实际意义,可以直接将pr初始化为0,彻底避免Edit4为空时的转换问题:
pr := 0.0; // 直接初始化,无需读取Edit4的内容
内容的提问来源于stack exchange,提问作者123
相关产品推荐
相关产品推荐

