25.3 case에서 break 생략 응용하기

case에서 break를 생략하는 상황은 버그 같지만 실제로는 많이 사용되는 방식입니다. 다음 내용을 소스 코드 편집 창에 입력하세요.

switch_without_break2.c

#define _CRT_SECURE_NO_WARNINGS    // scanf 보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>

int main()
{
    int num1;

    scanf("%d", &num1);    // 값을 입력받음

    switch (num1)
    {
    case 1:    // 1 또는
    case 2:    // 2일 때 코드 실행
        printf("1 또는 2입니다.\n");
        break;
    case 3:    // 3 또는
    case 4:    // 4일 때 코드 실행
        printf("3 또는 4입니다.\n");
        break;
    default:
        printf("default\n");
    }

    return 0;
}

소스를 컴파일하여 실행한 뒤 1을 입력하고 엔터 키를 누르세요.

실행 결과

1 (입력)
1 또는 2입니다.

이렇게 case 1:case 2:를 연달아서 지정하면 num1의 값이 1일 때도 코드가 실행되고 2일 때도 코드가 실행됩니다. 마찬가지로 case 3:case 4:도 연달아서 지정했으므로 num1의 값이 3 또는 4일 때 코드가 실행됩니다. 즉, case에서 break를 생략하면 여러 가지 값으로 같은 코드를 실행할 수 있습니다.

이 코드는 if 조건문과 논리 연산자로 표현할 수 있겠죠?

if (num1 == 1 || num1 == 2)
    printf("1 또는 2입니다.\n");
else if (num1 == 3 || num1 == 4)
    printf("3 또는 4입니다.\n");
else
    printf("default\n");

하지만 if, else if는 일일이 조건식을 나열해줘야 하므로 처리해야 할 숫자가 많아지면 매우 번거로워집니다. 이런 경우에는 case에서 break를 생략하는 방식이 유용합니다.