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 |