如何在Delphi 7控制台应用程序中进行Keypress验证

时间:2011-07-06 12:53:42

标签: delphi

我正在创建一个简单的delphi控制台应用程序,它对用户输入的数字进行算术运算,问题是用户可以输入'a'..'z','A'..'Z'导致app崩溃。我该如何防止这种情况?使用try-except不起作用,任何人都有防止这种崩溃的想法吗?

这是我的代码:

 Write('Please Enter a Number:=');
Readln(str1);
try
  num1:=StrToFloat(str1);
except
on e:exception do
  Writeln(e.message);
end;

先谢谢。

1 个答案:

答案 0 :(得分:2)

正如David所指出的,异常在控制台应用程序中的工作与在GUI应用程序中一样好。例如,这完美无缺:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  s: string;
  f1, f2: extended;

begin

  try

    Writeln('Please enter a number:');
    Readln(s);
    f1 := StrToFloat(s);

    Writeln('Please enter a second number:');
    Readln(s);
    f2 := StrToFloat(s);

    Writeln('The sum is ', FloatToStr(f1+f2));
    Readln;

  except
    on E: Exception do
    begin
      Writeln(E.Message);
      Readln;
    end;
  end;

end.

不使用例外的替代方法是使用TryStrToFloat函数:

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  s1, s2: string;
  f1, f2: extended;

begin

  Writeln('Please enter a number:');
  Readln(s1);
  Writeln('Please enter a second number:');
  Readln(s2);

  if TryStrToFloat(s1, f1) and TryStrToFloat(s2, f2) then
    Writeln('The sum is ', FloatToStr(f1 + f2))
  else
    Writeln('Invalid input.');

  Readln;

end.