프로그래밍/C

3.4 Switch

피노리코 2014. 10. 28. 22:05

switch문은 다중결정의 하나로서 수식이 상수 값에 일치하느지를 알아보고 그에따라 다른쪽 분기 시킨다


 switch (수식) {

        case 상수 : 문장

        case 상수 : 문장

        

        default : 문장

        

    }

각 경우는 하나 또는 여러개의 상수 또는 상수 수식으로 구분되는데 상수나 상수 수식은 정수 값을 가져야 한다. 만일 어떤 경우가 상수 값과 일치하면 바로 뒤의 문장을 수행한다. case 다음에 오는 수식들은 반드시 달라야 하며 똑같은 수식을 두번 이상 사용하면 안된다 default 는 각 경우가 만족되는 것이 없을때 수행되며 생략해도 무방하다. case 문과 default 문의 순서는 상관이 없으나 일반적으로 default문이 case 문 뒤에 오는것이 보통이다. 


앞의 1장에서 숫자 스페이스 문자 기타 모든 문자들을 casif-else if .. else 을 사용하여 구별하는 프로그램을 작성해 보았다 여기서 똑같은 프로그램을 switch 문으로 사용하여 작성해본다


/* print longest input line; specialized version */

int main(void)

{

    int c,i,nwhtie,nother,ndigit[10];

    

    nwhtie = nother = 0;

    for(i=0;i<10;i++)

        ndigit[i]=0;

    while ((c=getchar()) != EOF) {

        switch (c) {

            case 0: case 1: case 2: case 3: case 4:

            case 5: case 6: case 7: case 8: case 9:

                ndigit[c-'0']++;

                break;

                

           case ' ':

           case '\n':

           case '\t':

                nwhtie++;

                break;

            default:

                nother++;

                break;

        }

    }

    printf("digits = ");

    for(i=0;i<10;i++)

        printf("%d",ndigit[i]);

    printf(",white space %d,other = %d\n",nwhtie,nother);

    return 0;

}


break 문은 switch 문에서 벗어나는 역할을 수행한다 그것은 case가 레이블 구실만 하므로 한 case가 수행된 뒤 특별한 지시가 없을 경우 다음 case 문의 실행문을 차례차례 실행하기 때문이다 break  return문은 switch 문에서 벗어나기 위해 가장 많이 사용된다.

break 문은 이후에 설명하는 while , for, do 문으로부터 벗어나는데에도 사용된다. case 문은 여러가지 면에서 유용하게 사용될수 있으며 예제에서와 같이 여러가지 경우를 하나의 동작에 연결할 수도 있다. 그러나 각 case 문은 break 문으로 끝내야만 다음 case 로 넘어가는 것을 방지 할 수있다. 여라기자 경우를 하나의 동작에 연결하는 경우를 제외하고는 case 문을 사용하는 경우가 흔치 않다. 마지막 경우에 break 문을 넣느것은 논리적으로 보아 전혀 불필요하지만 만일의 경우에 논리 흐름을 안전하게 보장해 줄수 있으므로 의미가 있는 것이다.


예제 3-2 문자열 s를 t로 변활할떄 newline이나 tab물자를 \n이나 \t와 같은 escape sequence로 바꼬는 함수 escape(s,t)를 switch문을 사용하여 작성하라