C

[내배캠자습]C언어 챕터 3-6 : switch-case문

BreadMushroom 2026. 3. 28. 14:33

switch-case문

switch (Num)
{
case 값1:
	명령어1; // "Num == 값1"인 경우엔 명령어1
	...
	break;

case 값2:
	명령어2; // "Num == 값2"인 경우엔 명령어2
	...
	break;

default:
	명령어3; // "Num이 값1도 값2도 아닌 경우"(Num이 어떤 케이스에도 속하지 않는 경우)엔 명령어3
	...
	break;
}

switch-case문은 if-else if-else문으로 치환 가능합니다.

그럼에도 switch-case문을 사용하는 이유는 가독성 때문입니다. 반대로 if-else if-else문은 switch-case문으로 치환 불가능할 때가 있습니다. 특히 if-else if-else문의 조건식이 범위를 다루는 경우 불가능합니다.

 

Intentional-Fallthrough

고의적으로 case 내부에 break 구문을 적지 않은 경우입니다. 아래와 같이 코드를 작성한다면 Num이 값1과 같으면, case 값2 부분까지도 수행하게 됩니다.

switch (Num)
{
case 값1:
    명령어1;
		/*Intentional-Fallthrough*/
case 값2:
    명령어2; // Num == 값1인 경우엔 명령어1과 명령어2 모두 실행
    ...
    break;

default:
    명령어3;
    ...
    break;    
}

만약 case 내에서 변수를 선언하려면 아래와 같이 중괄호를 쳐주면 됩니다.

switch (Num)
{
case 값1:
    명령어1;
    ...      
    break;

case 값2:
    {
        int Var = 10;
        printf("%d", Var);
    }
    break;

default:
    작은 명령어3
    ...
    break;
}

Ex030601) switch-case문 [중요 샘플 코드]

다음의 소스코드를 “천천히 읽기”로 출력 결과를 예측해봅시다. 예측 결과와 실행 결과와 비교해봅시다.

// Main.c

#include <stdio.h>

int main()
{
	int Num = 101;

	switch (Num)
	{
	case 100:
		printf("Num == 100");
		break;

	case 101:
	case 102:
		printf("Num == 101 || Num == 102");
		break;

	default:
		printf("default");
		break;
	}

	return 0;
}

천천히 읽기
1.main함수 시작
2.int자료형 Num에 101로 초기화
3.switch문 변수Num의 값에 따라 순차적으로 case문 실행
4.Num 값은 101이니 case100은 넘어감
5.case101에서 break 없으니 case102의 명령도 실행
6."Num ==101 || Num == 102"출력 후 break만나 switch문 탈출
7.return 0만나 main함수 종료

// Main.c

#include <stdio.h>

int main(void)
{
	int Num;
	printf("원하는 메뉴를 고르세요.\n");
	printf("1.던전");
	printf("2.마을");
	printf("3.동쪽 숲\n");
	
	scanf_s("%d", &Num);

	switch (Num)
	{
	case 1:
	{
		printf("던전 입구에 도착했습니다.\n");
		break;
	}
	case 2:
	{
		printf("글로리온 마을에 도착했습니다.\n");
		break;
	}
	case 3:
	{
		printf("동쪽 숲 입구에 도착했습니다.\n");
	}//Intentional-Fallthrough
	case 4:
	{
		printf("여긴 올 때마다 으스스 하다니까.\n");
		break;
	}
	default:
		printf("잘못된 입력입니다.");
			break;
	}

	return 0;
}