[C언어][초급] Chapter26. 조건문 – switch 문 사용법과 특징
if문보다 더 간단하게 쓸 수는 없을까?
조건이 여러 개인 경우 대부분 if-else if 문을 사용하죠.
하지만 값이 정해진 변수(예: 숫자, 문자)에 따라 분기하는 경우에는 더 간단하고 보기 쉬운 방법이 있습니다.
바로 switch 문입니다.
● switch 문이란?
switch 문은 변수의 값을 기준으로 미리 정해둔 여러 경우(case) 중 하나를 선택해서 실행하는 조건문입니다.
값이 정확히 일치하는 경우만 실행되며, 주로 int, char 같은 정수형 값에 사용됩니다.
● 기본 구조
switch (변수) {
case 값1:
실행문1;
break;
case 값2:
실행문2;
break;
...
default:
기본 실행문;
}
- 변수의 값이 case 값과 일치하면 해당 블록이 실행됨
- break는 실행을 멈추고 switch문을 빠져나오기 위한 키워드
- 일치하는 case가 없으면 default가 실행됨 (생략 가능하지만 있는 게 좋음)
● 예제: 숫자에 따라 요일 출력
int day = 3;
switch (day) {
case 1:
printf("월요일\n");
break;
case 2:
printf("화요일\n");
break;
case 3:
printf("수요일\n");
break;
default:
printf("잘못된 입력입니다.\n");
}
● break가 없다면?
int num = 2;
switch (num) {
case 1:
printf("One\n");
case 2:
printf("Two\n");
case 3:
printf("Three\n");
}
출력 결과:
Two
Three
→ break가 없으면 다음 case로 흘러내려가는 현상(fall-through) 발생
→ 그래서 각 case마다 반드시 break를 써주는 게 일반적입니다.
● switch문은 어떤 값에 쓸 수 있을까?
- int, char, enum 등 정수형 값에만 사용 가능
- float, double, string 등은 사용할 수 없음
● switch vs if-else
항목 | switch문 | if-else문 |
대상 | 특정 정수 값 (int, char 등) | 어떤 조건식이든 가능 |
가독성 | 분기 수가 많을 때 더 깔끔함 | 조건이 다양하거나 범위일 땐 유리 |
fall-through | 가능 (break 없으면) | 불가능 (하나만 실행됨) |
● 정리하며
switch 문은 특정 값에 따라 실행할 코드를 나눌 때 매우 유용한 조건문입니다.
특히 메뉴 선택, 숫자 입력, 문자 판단 등 고정된 선택지에 대한 분기에 적합합니다.
break를 빠뜨리면 예상과 다른 흐름이 생길 수 있으니 꼭 주의하고,
default도 가능한 넣어서 예외 처리까지 깔끔하게 마무리해보세요!
실습 문제
아래 문제는 직접 코드를 작성해보고, 실행 결과를 확인한 후 스스로 정답을 유추해보는 형태입니다.
정답은 바로 아래에서 확인할 수 있습니다.
문제 1
정수형 변수 num의 값에 따라 아래와 같이 출력되도록 switch 문을 작성해보세요.
- 1: "하나"
- 2: "둘"
- 3: "셋"
- 그 외: "지원하지 않는 숫자입니다."
문제 2
다음 코드의 출력 결과는 무엇인가요?
int x = 2;
switch (x) {
case 1:
printf("A\n");
case 2:
printf("B\n");
case 3:
printf("C\n");
}
문제 3
변수 ch에 문자가 저장되어 있습니다. ch가 'a'이면 "사과", 'b'이면 "바나나", 'c'이면 "체리"를 출력하고, 그 외의 경우에는 "기타 과일"을 출력하도록 코드를 작성해보세요.
문제 4
아래 코드에서 "목요일"만 출력되도록 break 문을 추가해보세요.
int day = 4;
switch (day) {
case 1:
printf("월요일\n");
case 2:
printf("화요일\n");
case 3:
printf("수요일\n");
case 4:
printf("목요일\n");
case 5:
printf("금요일\n");
}
문제 5
다음 중 올바르게 작성된 switch 문은 어느 것인가요?
A.
switch (x) {
case 1:
printf("1입니다");
break;
case 2:
printf("2입니다");
break;
}
B.
switch (y > 5) {
case 1:
printf("크다");
break;
default:
printf("작거나 같다");
}
C.
switch (z) {
case 'a':
printf("알파벳 a입니다.");
break;
}
D.
switch (temp) {
case 36.5:
printf("정상 체온");
break;
}
▶ 정답 확인하기
정답 1
int num = 2;
switch (num) {
case 1:
printf("하나\n");
break;
case 2:
printf("둘\n");
break;
case 3:
printf("셋\n");
break;
default:
printf("지원하지 않는 숫자입니다.\n");
}
정답 2
출력 결과:
B
C
→ break 문이 없으므로 2부터 끝까지 모두 실행됩니다.
정답 3
char ch = 'b';
switch (ch) {
case 'a':
printf("사과\n");
break;
case 'b':
printf("바나나\n");
break;
case 'c':
printf("체리\n");
break;
default:
printf("기타 과일\n");
}
정답 4
int day = 4;
switch (day) {
case 1:
printf("월요일\n");
break;
case 2:
printf("화요일\n");
break;
case 3:
printf("수요일\n");
break;
case 4:
printf("목요일\n");
break;
case 5:
printf("금요일\n");
break;
}
정답 5
정답: A, B, C
설명:
- A: 전형적인 올바른 switch 문
- B: y > 5는 int 값이므로 case 1과 default로 처리 가능
- C: 문자 'a'는 정수형(char)로 사용 가능
- D: switch문에서 실수형(float)은 사용할 수 없습니다. → 오류