The Pawn language - CompuPhase

조건문(switch)

개요

조건문 중에서 특정 요건을 만족하는 조건식의 경우 if문보다 switch문을 사용하는 것이 더 효율적일 수 있습니다.

switch 조건문

사용법은 아래와 같습니다.

switch(변수)
{
    case 값:
        //코드
    case 값:
        //코드
    default:
        //코드
}

동작 원리는 변수의 값에 따라 그것에 맞는 동작을 하는 것입니다. 예제를 통해 이해해 보겠습니다.

예제 1

자판기에서 음료수를 팔고 있습니다. 판매 품목은 (콜라, 사이다, 환타) 입니다. 음료수를 주문하려면 번호를 입력해야 합니다. 번호는 판매 품목과 똑같은 순서로 (1, 2, 3) 입니다. 만약 2를 입력한다면 사이다가 주문됩니다.

new num = 2;
switch(num)
{
    case 1:
    {
        printf("콜라");
    }
    case 2:
    {
        printf("사이다");
    }
    case 3:
    {
        printf("환타");
    }
}

위 예제를 보시면 switch() 안에 정수(int) 변수를 입력하고, 그 변수의 값에 따라 case문으로 이동해서 해당하는 코드가 실행되는 원리임을 알 수 있습니다. 이처럼 변수의 값에 따라 취해야 하는 동작이 명확한 경우에 switch문을 사용합니다.

예제 2 (default문)

그런데 만약 판매하지 않는 품목을 입력한다면 어떻게 될까요? 예를 들어 5를 입력하면 자판기는 어떻게 동작할까요? 위의 예제에서는 이 경우 아무런 동작을 하지 않습니다. 매칭되는 case가 없기 때문이죠.

본 예제에서는 번호를 잘못 입력한 경우에도 메시지를 출력하도록 해 보겠습니다.

new num = 5;
switch(num)
{
    case 1:
        printf("콜라");
    case 2:
        printf("사이다");
    case 3:
        printf("환타");
    default:
        printf("판매하지 않는 품목입니다.");
}

예제 1의 코드에서 default문이 추가되었습니다. default는 맞는 case가 없을 경우 실행되는 코드입니다. default문은 case를 찾다가 정 없을 때 마지막으로 실행되어야 하므로, switch문의 맨 아래에 위치해야 합니다.

예제 3 (다중 조건)

안타깝게도 사이다와 환타가 품절되었습니다. 이제 2, 3 입력이 들어오는 경우 품절 메시지를 출력해야 합니다. 원래라면 아래와 같이 사이다와 환타의 메시지를 변경해야 했습니다.

switch(num)
{
    case 1:
        printf("콜라");
    case 2:
        printf("품절되었습니다.");
    case 3:
        printf("품절되었습니다.");
    default:
        printf("판매하지 않는 품목입니다.");
}

그런데 품절 메시지가 중복되는 것이 신경쓰입니다. 2와 3을 동시에 처리하고 싶을 때 아래와 같이 할 수 있습니다.

switch(num)
{
    case 1:
        printf("콜라");
    case 2,3:
        printf("품절되었습니다.");
    default:
        printf("판매하지 않는 품목입니다.");
}

위 코드처럼 콤마(,)를 구분자로 하여 여러개의 조건을 하나의 case에 걸 수 있습니다.

예제 4 (범위 조건)

이번에는 숨겨진 품목을 팔아보려고 합니다. 50~60 중 아무 숫자를 입력하면 숨겨진 음료수가 나옵니다.

switch(num)
{
    case 1:
        printf("콜라");
    case 2,3:
        printf("품절되었습니다.");
    case 50..60:
        printf("닥터 페퍼!");
    default:
        printf("판매하지 않는 품목입니다.");
}

위 코드에서는 범위를 지정하기 위해 " .. "을 사용했습니다. 이런 식으로 범위를 지정하여 case를 걸 수 있습니다.

댓글

댓글 본문
버전 관리
Acu
현재 버전
선택 버전
graphittie 자세히 보기