안녕하세요. 언제나 휴일의 언휴예요.
선택문
C언어에서는 특정 표현의 값에 따라 구문을 선택하여 수행하는 switch 선택문을 제공하고 있어요.
switch(표현)
{
case 상수: [수행 구문] [break]
case 상수: [수행 구문] [break]
…
[default:] [수행구문] [break]
}
switch 선택문에서 중괄호는 반드시 달아야 합니다. 물론 개발할 때 중괄호를 달지 않으면 문법 오류가 발생하기 때문에 개발할 때 실수할 확률은 지극히 낮겠죠.
여러 조건에 따라 수행할 구문을 표현할 때 if 조건문을 사용하면 복잡할 때가 있습니다. 이 때 switch 선택문으로 해결할 수 있는지 고민해 보세요.
학점 부여하기로 조건문과 선택문 비교
예를 들어 점수를 입력받아 학점을 A, B, C, D, F를 부여하는 작업은 if 조건문으로 작성하면 다소 복잡할 수 있어요.
다음 코드는 if 조건문으로 구현한 예제 코드입니다.
점수를 10으로 나눈 몫에 따라 학점을 부여하고 있어요.
#include <stdio.h>
int main()
{
int score = 0;
printf("점수(0~100):");
scanf_s("%d", &score);
if ((score < 0) || (score > 100))
{
printf("범위를 벗어났습니다.\n");
return;
}
printf("입력한 점수는 %d이고 학점은 ", score);
int level = score / 10;
if (level == 10 || level == 9)
{
printf("A");
}
else if (level == 8)
{
printf("B");
}
else if (level == 7)
{
printf("C");
}
else if (level == 6)
{
printf("D");
}
else
{
printf("F");
}
printf("입니다.\n");
return 0;
}
이를 switch 선택문으로 작성하면 다음처럼 작성할 수 있어요.
#include <stdio.h>
int main()
{
int score = 0;
printf("점수(0~100):");
scanf_s("%d", &score);
if ((score < 0) || (score > 100))
{
printf("범위를 벗어났습니다.\n");
return;
}
printf("입력한 점수는 %d이고 학점은 ", score);
int level = score /10;
switch (level)
{
case 10:
case 9: printf("A"); break;
case 8: printf("B"); break;
case 7: printf("C"); break;
case 6: printf("D"); break;
default: printf("F"); break;
}
printf("입니다.\n");
return 0;
}
switch 선택문에서 case 뒤에는 상수 표현이 오며 콜론(:)으로 레이블을 지정합니다.
switch 뒤에 표현 값에 따라 특정 레이블부터 코드를 수행하며 break 문을 만나기 전까지 수행합니다.
위 코드에서 level이 10과 9일 때 학점 A를 부여하기 위해 case 10: 뒤에 아무 코드를 작성하지 않고 case 9: 뒤에 A를 출력하는 구문을 표현하였습니다.
그리고 case 상수 표현에 해당하지 않는 나머지 모든 상황에서 수행할 구문은 defaut: 레이블을 사용하여 표현합니다.
주의할 점은 break를 만나기 전까지 수행한다는 점이예요.
기본 연습
하나의 문자를 입력받아 ‘i’ 혹은 ‘I’일 때는 추가, ‘d’ 혹은 ‘D’일 때는 삭제 , ‘s’ 혹은 ‘S’일 때는 검색, ‘l’, ‘L’일 때는 전체 출력이라고 화면에 출력하는 프로그램을 작성하시오.