case별로 특정 코드 실행하기

switch (식)
{
    case 상수값1; 코드1; break;
    case 상수값2; 코드2; break;
    case 상수값3; 코드3; break;

    default: 코드n;
}

 

(식)

  •  계산 결괏값이 정수형인 것만 가능하며, 'case'뒤에는 상수만 한 개 올 수 있음.(상수만 있는 식은 가능)
  • 문자 상수 'A'의 ASCII코드는 01000001이며, 논리값 참, 거짓은 정수 1, 0에 해당한다. 이처럼 문자 상수는 문자를 표현하는 코드 값이 정수이므로 '식' 결과가 문자형인 것도 사용 가능하며, '식' 결과가 논리값인 식 또한 가능하다.
  • 'case'값 역시 문자 상수나 논리값에 해당하는 정수를 사용하여 case 'A'; , case'+'; , case 1;, case 0; 으로 사용가능.

실행과정

  • 식을 계산하여 결괏값 구하기
  • 결괏값과 case 뒤의 값을 순서대로 비교하여 처음으로 일치하는 값을 만나면 그 뒤의 코드를 실행
  • 'break'를 만나면 switch문을 종료하고 다음 코드를 실행
  • 모든 'case'의 값과 비교하여도 같은 값이 없다면 'default'뒤의 코드를 실행
  • 'default: 코드n ' 부분은 필요하지 않다면 생략가능

주의

  • 특정 'case'의 코드를 실행할 때 'break'가 없으면 자동으로 다음 'case' 뒤의 코드를 실행하므로 switch문을 끝내고 싶다면 'break'를 사용해야함.
  • 위의 특징을 이용하면 다음과 같이 break를 사용하지 않음으로써 (식)이 상수1이거나 상수2이거나 상수3일 때 같은 코드를 실행할 수 있음.
case 상수1:
case 상수2:
case 상수3: 명령문1; 명령문2; ....; 명령문n; break;
  • 'case 상수1 || 상수2 || 상수3: 코드; break;'는 상수 중 한 개라도 0이 아닌 값이 있다면 or 연산 결과가 1이 되어 'case1; 코드; break;'와 같은 결과가 된다.

 

예시

# pragma warning(disable : 4996)
# pragma warning(disable : 6031)
# include <stdio.h>

int main()
{
	int n;

	printf("주민등록번호 일곱 번째 숫자는?");
	scanf("%d", &n);

	switch (n)
	{
		case 1: printf("1900년대 출생 남자입니다.\n"); break;
		case 2: printf("1900년대 출생 여자입니다.\n"); break;
		case 3: printf("2000년대 출생 남자입니다.\n"); break;
		case 4: printf("2000년대 출생 여자입니다.\n"); break;

		default: printf("고려 대상이 아닙니다.\n");
	}

	return 0;
}

 

# pragma warning(disable : 4996)
# pragma warning(disable : 6031)
# include <stdio.h>

int main()
{
	int n;

	printf("주민등록번호 일곱 번째 숫자는?");
	scanf("%d", &n);

	switch (n)
	{
		case 1: 
		case 3: printf("남자입니다.\n"); break;
		case 2: 
		case 4: printf("여자입니다.\n"); break;

		default: printf("고려 대상이 아닙니다.\n");
	}

	return 0;
}

'프로그래밍 > C,C++' 카테고리의 다른 글

C,C++ - 제어문 (while, do~while문)  (0) 2024.04.08
C,C++ - 반복문  (0) 2024.04.03
C,C++ - 제어문(if)  (0) 2024.04.03
C,C++ - 다양한 연산  (0) 2024.04.03
C,C++ - 입력함수 scanf()  (0) 2024.04.02

+ Recent posts