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를 생략하는 방식이 유용합니다.