多值條件判斷(case 敘述)

單一運算式多分支判斷

若需依據同一個運算式的不同數值執行對應邏輯,case .. of .. end 敘述會非常適合使用。

case SomeValue of
  0: DoSomething;
  1: DoSomethingElse;
  2: begin
       IfItsTwoThenDoThis;
       AndAlsoDoThis;
     end;
  3..10: DoSomethingInCaseItsInThisRange;
  11, 21, 31: AndDoSomethingForTheseSpecialValues;
else
  DoSomethingInCaseOfUnexpectedValue;
end;Code language: JavaScript (javascript)

else 分支為選填,功能等同 C 系列語言 switch 內的 default

若所有分支皆不匹配且未撰寫 else,則不會執行任何程式碼。

如果你熟悉 C 類語言,拿它和 switch 敘述對照會發現:Pascal 的 case 沒有自動穿透(fall-through),這是 Pascal 刻意設計的優點。你不需要手動加上 break;每次最多只會進入一組 case 分支,執行完直接離開整個 case 結構。

5 種合法匹配寫法

case num of
  5: Writeln('等於5');                  // 單一數值
  1,3,5: Writeln('匹配1、3、5其中任一');    // 多數值以逗號分隔
  10..20: Writeln('10到20數值區間');        // 連續數值範圍
  'a'..'z': Writeln('小寫英文字母');        // 亦支援字元區間
else
  Writeln('無符合的匹配值');
end;Code language: JavaScript (javascript)

多行程式碼分支必須包裹 begin..end

case n of
  2: begin
    Writeln('分支2');
    Writeln('執行多行程式');
  end;
end;Code language: JavaScript (javascript)

以下範例可輸入 1–128 的 ASCII 數字,並依輸入數值判斷對應的 ASCII 字元類型。

{$ifdef FPC} {$mode objfpc} {$H+} {$endif}
{$codepage utf8}
program AsciiJudge;

// 封裝程序:直接傳入 0–128 的 ASCII 數值判斷分類
procedure JudgeAsciiCode(code: Integer);
begin
  case code of
    // 1. 單數值匹配 + 多行 begin end(Enter 換行 ASCII=13)
    13: begin
      Writeln('======== 特殊換行鍵 ========');
      Writeln('ASCII 編碼:13 回車控制字元');
      Writeln('============================');
    end;

    // 2. 多離散數值逗號匹配:0–12、14–31 所有一般控制字元
    0,1,2,3,4,5,6,7,8,9,10,11,12,14,15..31:
      Writeln('類型:控制字元');

    // 3. 區間匹配:數字 0~9 對應 ASCII 48~57
    48..57: Writeln('類型:數字 0-9');

    // 區間:大寫英文字母 A-Z
    65..90: Writeln('類型:大寫英文字母 A-Z');
    // 區間:小寫英文字母 a-z
    97..122: Writeln('類型:小寫英文字母 a-z');

    // 4. else 預設分支 + 多行 begin end(標點符號)
  else
    begin
      Writeln('類型:標點/符號');
      Writeln('本次輸入 ASCII 編碼:', code);
    end;
  end;
end;

var
  asciiNum: Integer;
begin
  Write('請輸入介於 0~128 的 ASCII 數字:');
  ReadLn(asciiNum);

  // 限制輸入範圍
  if (asciiNum >= 0) and (asciiNum <= 128) then
    JudgeAsciiCode(asciiNum)
  else
    Writeln('輸入超出 0~128 範圍,無效!');

  ReadLn;
end.Code language: PHP (php)

關於 ASCII 編碼,讀者可參閱下列文章查詢:ASCII table – Table of ASCII codes, characters and symbols

多值條件判斷(case 敘述)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *