2011-07-06 4 views
-3

사용자가 입력 한 숫자의 산술 연산을 수행하는 간단한 델파이 콘솔 앱을 만들고 있는데 문제는 사용자가 'a'.. '' '', '' '..'Z '는 앱 충돌을 초래합니다. 이걸 어떻게 막을 수 있습니까? try-except를 사용하면 작동하지 않습니다. 아무도이 충돌을 막기위한 아이디어가 있습니까? 사전에Delphi 7 Console 응용 프로그램에서 Keypress 유효성 검사 수행 방법

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

감사 :

여기 내 코드입니다.

+2

예외 처리는 콘솔 응용 프로그램에서 잘 작동을 - 당신이 우리를 이야기하지 않는 무언가가 있어야합니다 –

+0

내가 무엇을 데이비드를 숨겨야합니까? num1은 Double 유형입니다. – CyprUS

+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. 
관련 문제