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;
}'C' 카테고리의 다른 글
| [내배캠자습]C언어 챕터 4-2 : for문 (0) | 2026.03.28 |
|---|---|
| [내배캠자습]C언어 챕터 4-1 : while문 (0) | 2026.03.28 |
| [내배캠자습]C언어 챕터 3-5 : 중첩 if문 (0) | 2026.03.28 |
| [내배캠자습]C언어 챕터 3-4 : if-else if-else문 (0) | 2026.03.28 |
| [내배캠자습]C언어 챕터 3-3 : if-else문 (0) | 2026.03.28 |