error-handling - 継続 - try catch throw




試してパスカルでキャッチしよう (2)

私はDev-Pas 1.9.2を使用しており、シンボルや文字の値が入力されたときにプログラムがクラッシュしないようにしようとしています。

私はグーグルとグーグルとこれを達成するためにどのような資源を見つけることができませんでした。

どんな助けでも大歓迎です。 ありがとう!

ここで私は入力を管理しようとしているコードです:

 Function GetMenuChoice : Integer;
  Var
    OptionChosen : Integer;
  Begin
    Write('Please enter your choice: ');
    Readln(OptionChosen);
    If (OptionChosen < 1) Or ((OptionChosen > 4) And (OptionChosen <> 9))
      Then
        Begin
          Writeln;
          Writeln('That was not one of the allowed options.  Please try again: ');
        End;
    GetMenuChoice := OptionChosen;
  End;

代わりにCharを受け入れるようにコードを変更してください。 何らかの理由で整数が必要な場合は、後で変換を処理してください。

これはDelphiで動作します。 ['1'..'4','9']ようなセットを使用できず['1'..'4','9']演算子を設定できない限り、正常に動作するはずです。

Function GetMenuChoice : Char;
Var
  OptionChosen : Char;
Begin
  repeat
    Write('Please enter your choice: ');
    Readln(OptionChosen);

    If not (OptionChosen in ['1'..'4', '9'])
      Then
        Begin
          Writeln;
          Writeln('That was not one of the allowed options.  Please try again: ');
        End;
  until OptionChosen in ['1'..'4', '9'];
  GetMenuChoice := OptionChosen;
End;

返される数値が絶対に必要な場合は、戻り値の型を整数(またはバイト)に戻してから、最終行を次のように変更します。

GetMenuChoice := Ord(OptionChosen) - 48;  

または

GetMenuChoice := Ord(OptionChosen) - Ord('0');

(ケンホワイトに加えて)

  1. 私は1つは、文字型の変数を入力し、入力を保存するためのREADを使用することができると思う。

  2. しかし、私は文字列型のバージョンを使用し、VALを使用します。

    • それはより多くのエンコーディングをエンコーディングするものであり、
    • 原則は価値9を超えます。
    • 入力が必要ですが、重い入力は画面を乱すでしょう。

後者の場合は、他の方法(ユニットCrtやVideoなど)がありますが、これはおそらく割り当ての範囲を超えています





pascal