그림 08-10의 if...else if...else
는 변수 n
에 저장된 값의 범위를 출력하도록 구성되어 있다. 문제를 낸 필자는 이것을 예로 해서 switch
문이 모든 if...else if...else
를 대신하기에는 무리가 있음을 설명하였지만, 그림 08-10의 if...else if...else
는 약간의 조작(?)을 통해 switch
문으로 변경이 가능하다. 따라서 이를 switch
문으로 변경해서 실행해보자.
짐작도 되지 않았다. 처음에 앞쪽에 if
문으로 "0이상 10미만" 등에 해당하는 구역을 따로 설정하고, 거기에 해당되면 새로운 변수 a
를 두어서 거기에 입력 받은 값을 넣어 switch
문에 활용해볼까 했지만 무엇이 문제인지 제대로 시행되지 않았다. 원하는 결과가 나오지 않아 곰곰히 더 생각해보니 결국 이게 goto
문의 응용과 뭐가 다를까 싶기도 하고 더 짜내어도 뚜렷한 해답 코드가 떠오르지 않아 일단 답안을 보면서 switch
문을 익히기로 하였다.
아래는 내가 초반에 if
문을 활용해서 만들어볼까 했던 것이다.
if( 0<= n < 10)
a = 0
.
.
.
switch(a)
{
case 0:
printf("0이상 10미만");
break;
case 1:
.
.
.
}
#include<stdio.h>
int main(void)
{
int n;
printf("0 이상의 정수를 입력하시오.\n");
scanf("%d", &n);
switch (n/10)
{
case 0:
printf("0이상 10미만");
break;
case 1:
printf("10이상 20미만");
break;
case 2:
printf("20이상 30미만");
break;
default:
printf("30이상");
}
return 0;
}
switch
문은 괄호 안의 변수의 값과 동일한 값을 갖는 case로 간다.switch
문이 가지는 변수는 해당 영역에서 비교 연산자 시행이 불가능하다.