Switch문
- if문이 비효율적인 경우, switch문을 사용하면 된다. switch 조건문은
정해진 상수들과 직접적인 비교를 할 수 있는 문법으로 되어있다.
- switch문은 "변수 값이 이미 정해져 있는 상수들과 비교할 때는 switch 조건문이 유리하다."
<전체적인 흐름>
switch문을 빠져나오는 break문
- case문을 보면 break라는 예악어를 사용했고, break문은 현재 수행하는 case문의 작업을 중단하는 의미다.
- 수식의 결과 값이 '상수1'과 일치하는 경우엔 '명령문2'만 수행하고 '상수2'와 일치할 때 '명령문3'만 수행한다.
조건 수식과 일치하면 case , 상수가 없으면 수행하는 default문
- default문은 수식의 결과 값이 case문을 사용해 열거한 상수들과 일치하는 값이 없는 경우에 수행할 명령을 적는 곳이다. if조건문의 else문이 하는 역할과 같다.
- 결과 값이 case에 해당하는 값과 일치하는 것이 없으면 '명령문5' 수행한다.
-switch 조건문의 형식상 break문을 가장 마지막에 두는데, 마지막에 break문이 없더라도 수행할 명령이 없어서 switch문이 종료되기 때문에 이 break문은 생략할 수 있다.
- 또한 default문도 반드시 사용해야 하는 것이 아니기 떄문에, 사용할 필요가 없으면 생략할 수 있다.
switch문을 사용하여 점수에 따른 등급 사용하기
int main()
{
int score = 85;
char grade;
switch (score / 10) {
case 10:
case 9:
grade = 'A';
break;
case 8:
grade = 'B';
break;
case 7:
grade = 'C';
break;
case 6:
grade = 'D';
break;
default:
grade = 'F';
break;
}
printf("당신의 점수는 %d점이고, 등급은 %c이다.\n", score, grade);
}
- 이전에 if~else문을 사용하여 했던 예제를 switch문으로 구현했다.
- if조건문은 범위를 비교하도록 조건 수식이 구성되어있고, switch문은 상수와 같은지를 비교하는 형식이 된다.
- 그래서 점수를 10으로 나누어서 case문마다 상수로 비교할 수 있게 구성했다.
- case 10에 break가 없는 이유는 90점 이상이 'A'인데 90~99까지는 몫이 9지만, 100점은 10이라서 10도 9와 같게 처리하면 되기 떄문이다.
-앞의 예제를 순서도로 나타내면 이와 같다.
- switch문은 수식의 결과 값 또는 변수의 값을 여러 개의 상수 값과 비교하는 데 장점이 있다.
- 하지만 case문에 상수가 아닌 변수를 적을 수 없다.
<출처 : DO IT C언어 - 김성엽>