2011-07-06 10 views
-3

ユーザーが入力した数値の算術演算を行う単純なデルファイコンソールアプリケーションを作成しています。問題はユーザーが 'a' .. 'z'、 'アプリのクラッシュを招く 'Z'。どうすればこれを防ぐことができますか? try-exceptを使用しても動作しませんが、誰もこのクラッシュを防ぐためのアイディアを持っていますか?事前にDelphi 7コンソールアプリケーションで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. 
関連する問題