006. FLOW CONTROL – 04. SWITCH … CASE

Posted on by pkchan

006-04 // SWITCH CASE

switch ( N ) {

case ( 값 ) :
실행명령 // statments
break;

case ( 값 ) :
실행명령 // statments
break;

default :
실행명령 // statments

}

N과 같은 값으로 점프해서 진행합니다. 그리고 break를 만나면 switch 문밖으로 빠져나옵니다. N과 같은 값이 없을 경우 default로 점프해서 진행합니다.
switch 문에 들어가는 분기의 기준이 되는 변수는 정수형이어야 합니다. 실수형 변수가 들어가면 오류가 생깁니다.
if 문과 비슷해 보이지만 내부적인 요소를 보면 전혀 다른 구조를 가지고 있습니다. if 문은 처음의 조건부터 순차적으로 비교하면서 내려오는 구조이고, switch 문은 내부적으로 각 case의 jumptable을 생성해 해당 case로 바로 보냅니다. 이는 곧 필요 없는 연산을 줄일 수 있습니다. 해당 case로 이동한 후 break 명령을 만날때까지 순차적으로 실행합니다.

/*
example 006-08 C language switch
*/

#include <stdio.h>

int main (void) {

          int n1, n2;
          char opr;

          printf("첫번째 숫자를 입력하세요 : ");
          scanf("%d",&n1);
          printf("연산자를 입력하세요 : ");
          scanf(" %c",&opr);
          printf("두번째 숫자를 입력하세요 : ");
          scanf("%d",&n2);

          switch (opr) {

                    case '+' :
                              printf("%d %c %d = %d 입니다.\n", n1, opr, n2, n1+n2);
                              break;

                    case '-' :
                              printf("%d %c %d = %d 입니다.\n", n1, opr, n2, n1-n2);
                              break;

                    case '*' :
                              printf("%d %c %d = %d 입니다.\n", n1, opr, n2, n1*n2);
                              break;

                    case '/' :
                              printf("%d %c %d = %f 입니다.\n", n1, opr, n2, (double)n1/n2);
                              break;

                    case '%' :
                              printf("%d %c %d = %d 입니다.\n", n1, opr, n2, n1%n2);
                              break;

                    default :
                              printf("%d %c %d = 잉? %c는 뭐지..;;;\n",n1, opr, n2, opr);

          }

          return 0;

}

REVIEW EXERCISES

1. 달을 입력하면 해당 일수를 출력하세요.

일수를 알고 싶은 달을 입력하세요. : 12
12월은 31일까지 있습니다.

Leave a Reply