switch문
C언어의 대표적인 조건문은 if ~ else 문이 있습니다. 이 if ~ else문은 조건이 주로 특정 범위를 조건으로 검사하는 경우에 많이 사용합니다.
예1). if ~ else 문
int value;
...
if(value < 0) {
...
} else if(value == 0) {
...
} else {
...
}
if문의 위와 같이 주로 범위에 대해서 조건에 대한 만족 여부를 판단합니다. 또한 else문을 만나려면 if( )문에서 먼저 비교 연산으로 판단하고, 참이 아니면 다시 else if( )문에서 또 비교 연산을 하고, 또 아니면 else 부분이 수행되는 식으로 순차적으로 지속적인 연산을 하게 됩니다. 만약 처리 로직이 특정 값 하나 하나에 따라서 다른 처리를 해야하는 경우에 대해서 if문으로 처리한다면...
예2). if ~ else 문
int value;
...
if(value == -1) {
...
} else if(value == 0) {
...
} else if(value == 1) {
...
} else if(value == 2) {
...
} else {
...
}
처럼 if문으로 구현할 수 있으며, 참이 될 때가 if, else if를 비교 연산을 하게 됩니다. 이 처럼 건별의 값에 대한 분기를 계속 연산을 하는 것에 대한 비효율 성을 개선하기 위하여 C언어는 switch 문을 제공합니다.
즉, 예제2)의 if ~ else문을 개선하기 위하여 제공되는 것이 switch문입니다.
switch문의 구조
switch (value)
{
case 정수형상수1:
...
break;
case 정수형상수2:
...
break;
......
default:
...
break;
}
switch문의 value 부분에는 정수형 변수나 결과가 정수형 값이 되는 수식이 올 수 있습니다.
case문에는 case 정수형 상수값 : 형식으로 구성되며 break를 만날 때가지 로직이 실행이 됩니다. default문은 생략가능하며 if ~ else문의 else와 같은 기능을 합니다. switch문은 각각의 case에 대해서 비교 연산을 하지 않고 바로 그 case문이 바로 실행이 됩니다.
ex). 문자 입력 테스트
#include <stdio.h>
int main(int argc, char **argv)
{
int ch;
while(1) {
printf("Enter a key: ");
ch = getchar();
while(getchar() != '\n');
switch (ch)
{
case 'L':
case 'l':
printf("Go Left\n");
break;
case 'R':
case 'r':
printf("Go Right\n");
break;
case 'Q':
case 'q':
printf("End...\n");
return 0;
default:
printf("Error.\n");
break;
}
}
}
위의 'L'을 입력받으면 case 'L':에 break문이 없기 때문에, 다음에 있는 case 'l' : 문을 침범합니다. 위와 예제와 같이 같은 기능을 하면 이렇게 연속으로 case문을 나열하고 break를 빼면 됩니다. case문에는 정수형 상수, 문자 상수, #define으로 선언한 macro 상수 등이 올 수 있으며, 이들 상수와 다른 상수간의 계산식도 허용됩니다. 그러나 변수나 const로 정의한 상수는 허용되지 않습니다.
예제). case 문 구성 테스트
#define RVALUE 100
const int LVALUE = -100;
int value;
int value2;
switch(value)
{
case value2 : // 변수 사용 금지 오류
break;
case LVALUE : // const 상수 사용 금지 오류
break;
case 5.0 : // 실수형 사용 금지 오류
break;
case RVALUE : // macro 상수 가능
break;
case 200 : // 정수형 상수 사용 가능
break;
case 'A' : // 문자 상수 사용 가능
break;
case RVALUE + 10 : // macro 상수와 상수간의 연산 가능
break;
case 200 + 10 : // 상수와 상수간의 연산 가능
break;
}
위의 예제와 같이 case문에 올 수 있는 경우가 정해져 있습니다.
'C언어 > 문법' 카테고리의 다른 글
16. 반복문 (while) (2) | 2019.11.04 |
---|---|
15. 반복문 (for) (2) | 2019.11.03 |
13. 조건문 (if ~ else if ~ else) (0) | 2019.10.31 |
12. C언어의 연산자(operator) (2) | 2019.10.31 |
11. 변수(變數:Variable)와 관련 총정리 (0) | 2019.10.30 |