본문 바로가기

C언어_VisualStudio

switch 구문 : switch / case / break / default

오늘은 조건문 중에서 switch 구문을 정리해보자. :-)

 

switch

 

switch 구문은 if ~ else 구문처럼 조건에 따라 프로그램의 흐름을 분기하는 목적으로 사용된다. 복잡한 if ~ else 문장을 간결하게 보이도록 만들 수도 있다. 만들 수도 있다고 한 것은 사용될 수 있는 영역이 if ~ else에 비해 제한적이기 때문이다. 

 

switch 문은 제어식의 값에 따라 실행할 문장을 결정하게 된다. 제어식(control expression)을 계산하여 그 값을 각 case절의 c1, c2, ··· 등과 비교한다. 여기서 c1, c2, ···은 정수여야 한다. case 절 중에서 제어식의 값과 일치하는 값이 있으면 관련된 case 절의 문장들이 차례로 실행되다가 break 문에 도달하면 switch 문은 종료된다. 만약 case절에서 일치하는 정수 값을 찾지 못하면 default 절이 실행된다.

여기서 주의해야 할 점은 break 문이 없으면 선택된 case절 안의 문장들을 실행된 다음, 계속해서 다음 case절의 문장들을 실행된다는 것이다. 따라서 break 문은 switch 구문에서 매우매우 중요하다.

반면에, default 문은 어떠한 case 문과도 일치하지 않을 경우 실행되는 것이기 때문에 있어도 되고 없어도 된다. 

 

switch(number){
    case c1:	// case 절에 있는 수식은 반드시 정수 상수여야 한다. 
        실행문;
        break;	// break 문은 거의 대부분 있어야 한다.
    case c2:
        실행문;
        break;
    default:	// default 문은 있어도 되고 없어도 된다.
        실행문
        break;
}

 

 

이제 if ~ else 문과 switch 문은 간단히 비교해보자. 예를들어 1부터 5까지 숫자를 입력받고 영문으로 변환시키는 프로그램을 만든다고 가정해보자. 저번에 정리한 if ~ else를 사용하면 다음과 같이 코드를 작성하게 될 것이다.

// if ~ else를 이용하여 1부터 5까지 숫자를 영문으로 변환
#include <stdio.h>
int main(void) {
	int n = 0;	// 숫자를 입력받을 변수 n 선언&초기화
	printf("number? ");
	scanf("%d", &n);
	if (n == 1) printf("one");
	else if (n == 2) printf("two");
	else if (n == 3) printf("three");
	else if (n == 4) printf("four");
	else if (n == 5) printf("five");
	else printf("None");	// 범위 외에 숫자를 입력할 경우 출력될 문구
	return 0;
}

참고) if ~ else문은 다음 글에 정리해놓았다.

https://cwithvisual.tistory.com/entry/%EC%A1%B0%EA%B1%B4%EB%AC%B8-%EC%A0%95%EB%A6%AC-if-if-else-else-if-else

 

조건문 정리 : if / if ~ else / else if / else

오늘은 조건문을 정리해보자. :-) 조건문 프로그램이 단조롭게 순차적으로 실행되는 것은 아니다. 조건에 따라 실행 순서를 바꿔줄 수 있는데 이때 사용하는 게 조건문이다. 조건문에는 if문과 sw

cwithvisual.tistory.com

 

이번에는 switch 문을 이용하여 작성해보자. 숫자를 입력받을 변수를 선언하고 입력받는 것은 동일하다. 입력받은 정수 n에 따라 달라지게 되므로 switch 문의 수식에는 n을 넣어준다. case 문에는 각각 1, 2, 3, 4, 5일 경우를 넣어주고 각각의 경우에 변환될 영문을 적어주고 break 문을 작성하면 된다.

나타내면 다음과 같다.

// switch를 이용하여 1부터 5까지 숫자를 영문으로 변환
#include <stdio.h>
int main(void) {
	int n = 0;	// 숫자를 입력받을 변수 n 선언&초기화
	printf("number? ");
	scanf("%d", &n);
	switch (n) {	// n값에 따라 출력문이 달라짐으로 수식자리에 n을 적는다.
	case 1: printf("one"); break;	// break 문을 생략하지 않도록 주의한다.
	case 2: printf("two"); break;
	case 3: printf("three"); break;
	case 4: printf("four"); break;
	case 5: printf("five"); break;
	default: printf("None"); break;
	}
	return 0;
}

 

만약 여기서 break 문을 빠트리면 어떻게 될까?

// switch를 이용하여 1부터 5까지 숫자를 영문으로 변환_break 문 생략
#include <stdio.h>
int main(void) {
	int n = 0;	// 숫자를 입력받을 변수 n 선언&초기화
	printf("number? ");
	scanf("%d", &n);
	switch (n) {	// n값에 따라 출력문이 달라짐으로 수식자리에 n을 적는다.
	case 1: printf("one");
	case 2: printf("two");
	case 3: printf("three");
	case 4: printf("four");
	case 5: printf("five");
	default: printf("None");
	}
	return 0;
}

그리고 3을 입력했다고 하면 결과는 다음과 같이 나오게 된다.

break문 생략

switch구문을 쓸 때는 break가 중요하다! 절대 절대로!