다중 값 조건 판단 (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 (엔터 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 구문)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다