강좌 & 팁
3.3.6 switch 문
if 문이 두 명령문 중에서 하나를 실행하는 선택문인 데 비해서 switch 문은 여러개의 명령문 중에서 하나를 실행하는 선택문이다. if - else 문을 사용해서 해도 되지만 switch 문을 사용하는 것이 더 편리하다.
switch 문의 형식
switch (정수식){
case 정수값1 : 명령문
case 정수값2 : 명령문
case 정수값3 : 명령문
.
.
.
case 정수값n : 명령문
default : 명령문
}
switch 문 뒤의 괄호 속에 정수 값을 가지는 변수 또는 수식이 올 수 있다. 변수의 경우는 int형이나 char 형이 올 수 있고, 실수형은 올 수 없다.
각 case 문은 예약어 case 로 시작하며 정수 값을 가지는 상수와 콜론(:)이 오고, 그 뒤에 명령문들이 온다.
정수 값을 가지는 상수는 int형이나 char 형이다.
각 case 문의 콜론 다음에 오는 명령문은 복합문의 경웨소 중괄호로 둘러싸지 않는다.
여러 case 문의 마지막에는 default 문이 온다. default 문은 위의 case 문이 하나도 실행되지 않았을 경우 실행된다. default 문은 생략될 수 있으나 오류나 예외일 경우의 메시지를 출력하는 데 사용하면 좋다.
switch 문의 실행은 괄호 속의 정수식의 값과 각 case 다음의 정수 값을 차례로 비교하여 일치할 경우 해당 case 문과 그 다음의 모든 case문들을 실행한다. 이 경우 default 문의 명령문까지 수행된다. 따라서 각 case 문은 break 문으로 실행을 중단시킨다.
앞의 중첩된 if - else 문을 switch 문으로 바꾸어 작성한 예제를 보도록 하자
#include <stdio.h>
int main(){
int score;
char grade;
printf("Enter Score: ");
scanf("%d", &score);
score = score / 10;
switch( score){
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(" Your Grade is : %c\n", grade);
}
위의 예제에서 각 case 문 뒤의 break 문은 실해오가 동시에 switch 문의 실행을 끝나게 하는 역할을 한다. break 문이 없을 경우의 실행은 score 가 9 의 값이라면 case 9에서 default 까지 모두 실행되게 된다.
처음의 case 10과 두 번째의 case 9는 case 10이나 9일 경우에 공통적으로 실행된다.
score 와 일치하는 값이 없을 경우는 default 문이 실행된다. switch 문의 case 내에는 중첩적인 switch 문이 올 수 있다.
다음의 예제는 switch 문의 값을 문자형으로 받는 경우이다.
#include <stdio.h>
int main(){
char ch;
printf( "enter the number 0 t0 9 :");
scanf( "%c", &ch);
switch(ch){
case '0' : printf( "number is [0]\n"); break;
case '1' : printf( "number is [1]\n"); break;
case '2' : printf( "number is [2]\n"); break;
case '3' : printf( "number is [3]\n"); break;
case '4' : printf( "number is [4]\n"); break;
case '5' : printf( "number is [5]\n"); break;
case '6' : printf( "number is [6]\n"); break;
case '7' : printf( "number is [7]\n"); break;
case '8' : printf( "number is [8]\n"); break;
case '9' : printf( "number is [9]\n"); break;
default : printf( "error \n"); break;
}
}