switch ~ case
다중 선택문이라고 하며 변수값을 평가해서
해당되는 값에 대해 처리해주기 위해 주로 사용된다.
[문법]
switch (정수변수)
{
case 정수상수1:
문장1;
break;
case 정수상수2:
문장2;
break;
...
case 정수상수n:
문장n;
break;
default:
디폴트문장;
}
※ break { 중괄호로 시작해서 } 중괄호로 끝나는 부분을 블록이라고 하며 break 는
블록을 탈출한다는 의미이다. 미드 중 prison break 뜻이 무엇인가? 감옥 탈출 아닌가?
<유의점>
정수변수에는 char, short, int 만 올 수 있다.
float, double 과 같은 실수형 변수는 올 수 없다.
정수상수에는 1, 'a', 등이 올 수 있으며
1.0f, 3.14 와 같은 실수상수는 올 수 없다.
default:부분에는 break;는 불필요하나
반드시 디폴트 문장이 있어야 컴파일 에러가 나지 않는다.
예1)
#include <stdio.h>
void main()
{
printf("1. 짜장면\n");
printf("2. 우동\n");
printf("3. 짬뽕\n");
printf("4. 볶음밥\n");
printf("5. 잡채밥\n");
printf("6. 탕수육\n");
printf("7. 깐풍기\n");
int iSelect;
scanf("%d", &iSelect);
if (1 == iSelect)
{
printf("짜장면을 주문하셨습니다.\n");
}
else if (2 == iSelect)
{
printf("우동을 주문하셨습니다.\n");
}
else if (3 == iSelect)
{
printf("짬뽕을 주문하셨습니다.\n");
}
else if (4 == iSelect)
{
printf("볶음밥을 주문하셨습니다.\n");
}
else if (5 == iSelect)
{
printf("잡채밥을 주문하셨습니다.\n");
}
else if (6 == iSelect)
{
printf("탕수육을 주문하셨습니다.\n");
}
else if (7 == iSelect)
{
printf("깐풍기을 주문하셨습니다.\n");
}
else
{
printf("잘못된 선택입니다.\n");
}
}
switch ~case 문으로 고치면 아주 간결하게 만들 수 있다.
#include <stdio.h>
void main()
{
printf("1. 짜장면\n");
printf("2. 우동\n");
printf("3. 짬뽕\n");
printf("4. 볶음밥\n");
printf("5. 잡채밥\n");
printf("6. 탕수육\n");
printf("7. 깐풍기\n");
int iSelect;
scanf("%d", &iSelect);
switch (iSelect)
{
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;
case 6:
printf("짜장면을 주문하셨습니다.\n");
break;
case 7:
printf("짜장면을 주문하셨습니다.\n");
break;
default:
printf("잘못된 선택입니다.\n");
}
}
<질문>
break; 문장을 넣어주지 않으면 어떻게 될까?
예2)
#include <stdio.h>
#include <conio.h> // for getch()
void main()
{
puts(" w");
puts("a s d");
char cKey = getch();
putchar(cKey); // putch(cKey); 를 해도 무방
printf("\n");
switch (cKey)
{
case 'w':
puts("위로 이동");
break;
case 'a':
puts("좌로 이동");
break;
case 's':
puts("아래로 이동");
break;
case 'd':
puts("우로 이동");
break;
default:
puts("잘못된 입력값입니다.");
}
}
<질문>
만약에 Caps Lock On 상태가 되어
대문자 W,A,S,D 값을 키보드값으로 받는다면
"잘못된 입력값입니다." 라는 메시지를 출력하는게 좋을까?
<실습>
점수를 입력받아 0~100 점을 벗어나면, "잘못된 입력입니다"를 출력하고
0~100 점 사이의 점수를 입력받으면
100~90 A학점
~80 B학점
~70 C학점
~60 D학점
~ 0 F학점
해당 학점을 출력하세요!
switch case 문을 사용해서 작성해야합니다.