You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中如何通过InputBox验证多个整数输入?

Delphi整数数组输入验证与排序实现

问题分析

你当前的代码存在两个核心问题:

  1. try-except语法不完整:你的第二个代码中,try块和except块未用end;闭合,导致编译错误,异常捕获逻辑根本无法生效。
  2. 未处理重复输入与取消操作:输入错误后直接跳过当前元素,会导致数组保留未初始化的随机值,且未处理用户点击InputBox取消按钮的场景。

完整解决方案代码

procedure TForm1.Button1Click(Sender: TObject);
var
  arr: array[0..4] of Integer; // 定义存储5个整数的数组
  i, j, Temp: Integer;
  InputStr: string;
begin
  // 循环获取用户输入并验证
  for i := 0 to High(arr) do
  begin
    repeat
      InputStr := InputBox('整数排序程序', Format('请输入第%d个整数', [i+1]), '');
      try
        // 尝试转换输入为整数
        arr[i] := StrToInt(InputStr);
        Break; // 输入正确,跳出重复输入循环
      except
        on EConvertError do
          // 捕获字符串转整数失败的异常
          ShowMessage('输入无效,请输入合法整数!');
        on EAbort do
        begin
          // 捕获用户取消输入的操作
          ShowMessage('操作已取消');
          Exit; // 直接退出整个按钮点击事件
        end;
      end;
    until False; // 循环直到输入正确
  end;

  // 冒泡排序实现
  for i := 0 to High(arr)-1 do
    for j := i+1 to High(arr) do
      if arr[i] > arr[j] then
      begin
        Temp := arr[i];
        arr[i] := arr[j];
        arr[j] := Temp;
      end;

  // 将排序后的数组显示到ListBox
  ListBox1.Clear;
  for i := 0 to High(arr) do
    ListBox1.Items.Add(IntToStr(arr[i]));
end;

关键细节说明

  • 异常捕获优化:明确捕获EConvertError(字符串转整数失败)和EAbort(用户取消输入)两种异常,避免捕获所有异常导致的逻辑混乱。
  • 重复输入机制:用repeat-until循环强制用户输入正确的整数后再进入下一个元素的输入,确保数组所有元素都被正确初始化。
  • 排序与显示:集成了基础的冒泡排序逻辑,并将排序结果清空ListBox后逐一添加显示。
  • 数组边界处理:使用High(arr)代替Length(arr)-1,对于静态数组来说更安全且代码更简洁。

内容的提问来源于stack exchange,提问作者Rahul Mistry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:50:26