我正在创建一个简单的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;
先谢谢。
答案 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.