switch
하나의 변수 값을 기준으로 여러 경우를 나누어 실행하는 제어문이다.
주로 같은 변수에 대해 여러 조건을 비교할 때 사용한다.
기본 문법
switch (변수)
{
case 1:
실행문;
break;
case 2:
실행문;
break;
case 3:
실행문;
break;
default:
실행문;
break;
}
동작 원리
switch의 변수 값과 일치하는 case를 찾아 해당 위치로 이동한 후 코드를 실행한다.
int num = 2;
switch (num)
{
case 1:
cout << "1번";
break;
case 2:
cout << "2번";
break;
case 3:
cout << "3번";
break;
}
실행 결과
2번
동작 과정
switch (2)
↓
case 2:
↓
cout << "2번";
↓
break;
↓
switch 종료
break
현재 case의 실행을 종료하고 switch문을 빠져나가는 역할을 한다.
switch (num)
{
case 1:
cout << "1번";
break;
}
특징
- 현재
case만 실행하고 종료한다. - 대부분의 경우
case끝에 작성한다. - 작성하지 않으면 아래
case까지 계속 실행된다.
break가 없는 경우
int num = 1;
switch (num)
{
case 1:
cout << "1번" << endl;
case 2:
cout << "2번" << endl;
case 3:
cout << "3번" << endl;
}
실행 결과
1번
2번
3번
이유
case 1에서 시작했지만 break가 없으므로 아래의 모든 case를 계속 실행한다.
이 현상을 Fall Through(폴스루) 라고 한다.
default
어떤 case와도 일치하지 않을 경우 실행되는 구문이다.
int num = 10;
switch (num)
{
case 1:
cout << "1번";
break;
case 2:
cout << "2번";
break;
default:
cout << "해당 번호 없음";
break;
}
실행 결과
해당 번호 없음
여러 case를 같은 코드로 처리하기
int month = 1;
switch (month)
{
case 12:
case 1:
case 2:
cout << "겨울";
break;
case 3:
case 4:
case 5:
cout << "봄";
break;
}
실행 결과
겨울
switch문에서 사용 가능한 자료형
사용 가능
int
char
enum
enum class
예시
char grade = 'A';
switch (grade)
{
case 'A':
cout << "우수";
break;
}
사용 불가능
float
double
string
예시
string name = "홍길동";
switch (name) // 오류
{
}
switch는 정수형 계열 값만 비교할 수 있다.
if문과 switch문의 차이
if문
범위 비교 가능
if (score >= 90)
{
cout << "A";
}
else if (score >= 80)
{
cout << "B";
}
switch문
값 비교만 가능
switch (score)
{
case 100:
cout << "A";
break;
}
switch문 사용이 적합한 경우
- 메뉴 선택
- 숫자 입력 처리
- 상태(State) 처리
- enum 값 분기 처리
enum class Menu
{
Start = 1,
Option,
Exit
};
switch (menu)
{
case Menu::Start:
break;
case Menu::Option:
break;
case Menu::Exit:
break;
}
정리
switch는 하나의 변수 값을 기준으로 여러 경우를 처리하는 제어문이다.case는 비교할 값을 의미한다.break를 사용하면 해당case만 실행하고 종료한다.break가 없으면 아래case까지 계속 실행된다(Fall Through).default는 일치하는case가 없을 때 실행된다.- 주로 메뉴 선택이나 상태 분기에 사용한다.
- 범위 비교가 필요하면
if문을 사용하는 것이 적합하다.