[TIL] 211014

Namung's Sea·2021년 10월 14일
0

Today I Learned

목록 보기
6/6
post-thumbnail

switch문으로 대신하기

문제


그림 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문이 가지는 변수는 해당 영역에서 비교 연산자 시행이 불가능하다.
    약간의 조작(나누기)를 이용하면 소수점이 절삭된다는 점을 응용해, 비교 연산자와 비슷하게 해당되는 구역의 값을 가져올 수 있다.
profile
개발자로 시작| 공부한 것을 기록합니다.

0개의 댓글