C 언어 - 조건문 switch

컴퓨터/C

728x90
반응형

조건문 switch문 

앞서 배운 if문들과 처럼 프로그램의 흐름을 제어할 수 있습니다. 하지만 사용하는 구조와 특징이 조금 다른 개념이 있고 각각에 장단점이 있기 때문에 알아보고 사용해 보도록 하겠습니다.

 

switch문의 사용법

switch(변수)
{
    case 1:
              수행 식 
              break;
    case 2: ...
    case 3: ...
    default:
              수행식
              break;
}
  • C언어에서 제공되는 switch문의 기본적인 형태 입니다.
  • switch문은 중괄호로{} 묶여 있어 범위를 나타냅니다. 
  • switch문의 시작에 괄호()를 통하여 제어할 변수를 선택 합니다.
  • 제어할 변수의 값을 통해 case문을 확장시켜 case별로 명령실행할 흐름을 선택합니다.
  • 각 case에는 중괄호{}가 존재하지 않으며 case 값 : 으로 시작을 알리며 break;를 통해 종료를 알립니다.
  • default는 switch문의 제어인자로 선택된 변수의 값이 해당되는 case문이 없으면 진행 하게 됩니다.

switch문의 장단점

switch문은 조금 더 구조를 확실하게 눈으로 볼수 있습니다. 즉, 구조의 파악을 하기에 조금더 효율적입니다. 하지만 C언어의 switch문에서는 각각의 case에 값만이 들어갈수 있어 조건식을 통한 표현이 없어 제한되는 부분이 있습니다. 그러면 소스코드를 통해 한번 switch문을 알아보도록 하겠습니다.

 

활용해보기

예제 1 ) 인터페이스 구조 만들어보기

  • 변수는 int형 변수 main_menu 만들기
  • 1. 메인 화면 출력하기
    -플레이어 육성 게임-
    1.  불러오기
    2.  새로 하기
    3.  종료하기
#include <stdio.h>

int main()
{
	int main_menu;
	

	printf("플레이어 육성 게임\n");
	printf("1.불러오기\n");
	printf("2.새로하기\n");
	printf("3.종료\n");
	printf("원하는 메뉴를 선택 하세요 : ");
	scanf_s("%d", &main_menu);
	switch (main_menu)
	{
	case 1:
		printf("1.정보 확인하기\n");
		printf("2.사냥터로 이동\n");
		printf("3.상점으로 이동\n");
		printf("4.메인화면으로 이동\n");
		printf("5.게임 종료하기\n");
		break;
	case 2:
		printf("1.정보 확인하기\n");
		printf("2.사냥터로 이동\n");
		printf("3.상점으로 이동\n");
		printf("4.메인화면으로 이동\n");
		printf("5.게임 종료하기\n");
		break;
	case 3:
		printf("게임을 종료 합니다.\n");
		break;
	}
}

결과 보기

더보기

다음과 같이 소스코드를 작성하며 if else문 보다 조금더 구조의 파악이 쉽게 소스코드를 작성할수 있습니다.
하지만 1번과 2번의 경우 중복된 경우에 두번다 작성을 했습니다. 

if문의 경우 ||(or)수식을 통하여 작성하면 한번이면 작성할수 있는데 말이죠.

이런 문제를 극복하는 방법에 대하여 알아보도록 하겠습니다.

예제 2 ) case 1 과 case 2 합치기

#include <stdio.h>

int main()
{
	int main_menu;


	printf("플레이어 육성 게임\n");
	printf("1.불러오기\n");
	printf("2.새로하기\n");
	printf("3.종료\n");
	printf("원하는 메뉴를 선택 하세요 : ");
	scanf_s("%d", &main_menu);
	switch (main_menu)
	{
	case 1:
	case 2:
		printf("1.정보 확인하기\n");
		printf("2.사냥터로 이동\n");
		printf("3.상점으로 이동\n");
		printf("4.메인화면으로 이동\n");
		printf("5.게임 종료하기\n");
		break;
	case 3:
		printf("게임을 종료 합니다.\n");
		break;
	}
}

결과 보기

더보기

결과는 동일하지만 소스코드는 더 간결해 졌습니다. case1과 case2는 동일한 동작을 합니다. 
그래서 case1의 끝나는 지점인 break;를 표시를 하지 않는다면 case1과 case2는 합쳐지는 효과를 가지게 됩니다.

따라서 위와같이 간결하게 표현이 가능하게 됩니다.

예제 3 ) 인터페이스 구조 만들어 보기 2

  • 변수는 int형 변수 main_menu 만들기
  • 1. 메인 화면 출력하기
    -플레이어 육성 게임-
    1.  불러오기
    2.  새로 하기
    3.  종료하기
  • 변수는 int형 변수 sub_menu 만들기
  • 1번 또는 2번 선택 시 (각각의 구간 진입시 - 해당 번호와 동일하게 출력)
    1. 정보 확인하기
    2. 사냥터로 이동하기
    3. 상점으로 이동하기
    4. 메인화면으로 이동하기
    5. 게임 종료하기

  • 3번 선택시 (종료하기 출력)
#include <stdio.h>

int main()
{
	int main_menu;
	int sub_menu;

	printf("플레이어 육성 게임\n");
	printf("1.불러오기\n");
	printf("2.새로하기\n");
	printf("3.종료\n");
	printf("원하는 메뉴를 선택 하세요 : ");
	scanf_s("%d", &main_menu);
	switch (main_menu)
	{
	case 1:
	case 2:
		printf("1.정보 확인하기\n");
		printf("2.사냥터로 이동\n");
		printf("3.상점으로 이동\n");
		printf("4.메인화면으로 이동\n");
		printf("5.게임 종료하기\n");
		printf("원하는 메뉴를 선택 하세요 : ");
		scanf_s("%d", &sub_menu); 

		switch (sub_menu) // 메뉴안의 메뉴 !
		{
		case 1:
			printf("정보 확인메뉴에 들어왔습니다.\n");
			break;
		case 2:
			printf("사냥터 이동메뉴에 들어왔습니다.\n");
			break;
		case 3:
			printf("상점 이동 메뉴에 들어왔습니다.\n");
			break;
		case 4:
			printf("메인 화면으로 이동 메뉴에 들어왔습니다.\n");
			break;
		case 5:
			printf("게임 종료하기 메뉴에 들어왔습니다.\n");
			break;
		default:
			printf("잘못된 값을 입력했습니다.\n");
			break;
		}
		break;
	case 3:
		printf("게임을 종료 합니다.\n");
		break;
	default:
		printf("잘못된 값을 입력했습니다.\n");
		break;
	}
}

결과 보기

더보기

이번에는 default를 추가하여 예외까지도 처리해 보았습니다.

또한 switch문을 중첩시키는 것도 확인을 해보았습니다. 

이런식으로 다양한 활용으로 프로그램을 제어할수 있습니다.

 

계절 확인 프로그램 만들어 보기

자 이제 우리는 switch문을 이용해서 계절을 한번 알아보는 프로그램을 만들어 보도록 하겠습니다.

 

1. 하나의 정수를 입력 받습니다. 

2. switch문을 사용하여 프로그램 흐름을 제어합니다.

3. 정수 입력에 따라 출력을 합니다. 

   12~2 : 겨울입니다

   3~5 : 봄입니다

   6~9 : 여름 입니다

   10~11 : 가을 입니다.

 

한번 스스로 만들어 보세요.

결과 보기

더보기
#include <stdio.h>

int main()
{
	int num;

	printf("궁금한 월을 선택하세요 : ");
	scanf_s("%d", &num);

	switch (num)
	{
	case 12:
	case 1:
	case 2:
		printf("겨울입니다\n");
		break;
	case 3:
	case 4:
	case 5:
		printf("봄입니다\n");
		break;
	case 6:
	case 7:
	case 8:
	case 9:
		printf("여름 입니다\n");
		break;
	case 10:
	case 11:
		printf("가을입니다\n");
		break;
	default:
		printf("정확한 월을 입력해 주세요\n");
		break;
	}
	return 0;
}

어떠셨나요? 사실 어떻게 만들던 결과만 나오면 정답입니다 ! 수고하셨습니다.

728x90
반응형

'컴퓨터 > C' 카테고리의 다른 글

C 언어 - 반복문 while  (0) 2021.06.04
C 언어 - 중간 정리  (0) 2021.06.02
C 언어 - 표준 입력  (0) 2021.06.01
C 언어 - if ~ else if ~ else  (0) 2021.05.31
C 언어 - 조건문 if else  (0) 2021.05.30

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :