4.2 다중조건 분기문     [doc]    [stms]

 만약 if 명령으로 여러 가지의 경우를 따져서 수행하려고 하면 if ~ else 문이 다중으로 중첩되어 프로그램의 가독성을 떨어뜨린다. 예를 들어서 어떤 정수형 변수의 값이 0일 때, 1일 때, 2일 때, 등등에 수십 가지에 대해서 동작이 다르게 수행되어야 하는 경우 if ~ else 명령보다는 여기에서 소개할 switch ~ case 명령을 사용하는 것이 가독성이나 수행 속도 면에서 훨씬 효율적이다.


 switch ~ case 명령의 기본적인 문법은 다음과 같다.


switch (정수형변수) {
  case 값1:
      명령문1;
      break;
  case 값2:
      명령문2;
      break;
  ...
  default:
      명령문n;
      break;
}

switch명령 바로 다음에 오는 변수가 case 다음의 값1이나 값2에 해당하는 값이 있는지 판별한 후에 해당하는 값이 있으면 거기에 속한 명령문을 수행한다. case뒤에 오는 것은 반드시 하나의 값이어야 하며 조건이나 여러 값은 올 수 없다. 해당하는 값이 없을 경우에는 default 로 설정된 ‘명령문n’을 수행하게 된다. 필요에 따라 default문은 생략할 수도 있다.


 이 명령을 쓸 때 주의할 점은 다음과 같다.


  1. switch문 뒤에 오는 변수는 반드시 정수형 (char, short, int, long과 각각의 unsigned형) 이어야 한다

  2. case 에 포함된 명령어들의 끝에는 반드시 break문을 써야 한다.


 다음 예제는 정수(명령)를 하나 입력받아서 1이면 “Robot turned left.”이라고 표시하고, 2라면 “Robot turned right.”라고 표시하고 3이면 “Robot stopped.”이라고 표시한다. 만약 1, 2, 3중 아무 것도 아니라면 “illegal command.”라고 표시하는 간단한 프로그램이다. 흔히 하기 쉬운 실수가 case문이 끝나는 곳에 break문을 빼먹는 것인데 초보자들은 유의해야 한다.


ex04-08.c
#include <stdio.h>
int main() {
  int iA;
  printf("1. Turn left.\n");
  printf("2. Turn right.\n");
  printf("3. Stop.\n ");
  printf("Choose one :");
  scanf("%d", &iA);
  
  switch(iA) {
      case 1:
          printf("Robot turned left.\n");
          break;
      case 2:
          printf("Robot turned right.\n");
          break;
      case 3:
          printf("Robot stopped.\n");
          break;
      default:
          printf("Illegal command.\n");
          break;
  }
}

1. Turn left.
2. Turn right.
3. Stop
Choose one : 2
Robot turned right.
Press any key to continue...

이 예제와 같이 세 가지 정도는 if ~ else 문으로 구현해도 상관 없으나 경우의 수가 많아 지는 곳에는 switch ~ case 문이 훨씬 더 효율적이다.



Posted by 살레시오
,