단일 표현식 다중 분기 판단
동일한 표현식의 값에 따라 서로 다른 로직을 실행해야 할 경우 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 구문)
Previous: 논리, 관계 및 비트 연산자