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 Programming Language 문법

1. C 프로그래밍 언어는? 2. C언어 개발 환경 (실습 환경) 3. C언어의 컴파일 과정 4. C 소스 파일 구성 5. 주석문(Comment) 6. 식별자 명명 규칙 7. C 프로그래밍의 시작 - 함수 8. 변수와 상수 (정수형) 9. 변..

www.it-note.kr

 

 

'C언어 > 문법' 카테고리의 다른 글

16. 반복문 (while)  (2) 2019.11.04
15. 반복문 (for)  (2) 2019.11.03
14. 조건문 (switch ~ case)  (2) 2019.11.02
13. 조건문 (if ~ else if ~ else)  (0) 2019.10.31
12. C언어의 연산자(operator)  (2) 2019.10.31
11. 변수(變數:Variable)와 관련 총정리  (0) 2019.10.30
블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

Tag ,

댓글을 달아 주세요