프로그래밍/C

switch ~ case문

길냥이 2025. 4. 18. 01:13
728x90

목차

  1. 중첩 if문
  2. break 명령어
  3. switch ~ case문

 

1. 중첩 if문

흠, 가끔 필요에 따라 중첩 if문이 필요한 경우가 있어요.

물론 중첩 if문은 if ~ else if ~ else문으로 바꿔 쓸 수도 있는데(본질적으로 if문 중첩과 else if문은 동일하기 때문)

아무튼, 한번 만들어보죠.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int stats = 0;
	printf("점수를 입력하세요: ");
	scanf("%d", &stats);

	if (90 < stats)                           //stats가 90보다 클 경우 실행
	{
		printf("A학점 입니다.\n");
		if (95 < stats)
			printf("장학금도 드립니다!\n");   //중첩 if문, stats가 95보다 클 경우 실행
		else
			printf("장학금은 없습니다.\n");   //그 외의 경우에 시행
	}
	else                                      //stats가 90보다 작을 경우 실행
		printf("등록에 실패하셧네요...\n");

	return 0;
}

자, 이렇게 만들 수 있습니다.

일부러 else if문을 안 썼는데..

여러 값을 입력해보죠.

 

만약 점수가 0 ~ 90일 경우

점수를 입력하세요: 86
등록에 실패하셧네요...

 

만약 점수가 91 ~ 95일 경우

점수를 입력하세요: 93
A학점 입니다.
장학금은 없습니다.

 

만약 점수가 96 이상일 경우

점수를 입력하세요: 99
A학점 입니다.
장학금도 드립니다!

좋아요.. 

if문을 중첩하는 경우의 장점은, 선행조건이 있으면 불필요한 조건 검사를 하지 않아요.

그리고 필요 자료가 정렬되어 있을 경우, 이진 탐색을 응용해서 이진 if문 방식을.. 아니 이건 어려우니까 넘어가죠.

그냥 if문을 중첩시켜서 덩어리로 쓰지 말고, 반토막내서 중첩하는 것도 있다는 것을 알아주세요.

 

2. break 명령어

흠, 근데 나는 어떤 경우에는 프로그램을 그냥 나가버리고 싶어요.

그런 경우에 break문을 사용해서 탈출한답니다.

break문은 제어문 말고도 반복문을 탈출하는 경우에도 사용하는데, 아쉽게도 if문 내에는 사용할 수 없어요.

 

다만 단점도 있는데, 제어문 한겹밖에 못 빠져나온답니다.

 

3. switch ~ case 문

switch ~ case문은 정수 결과 하나마다 출력을 생성합니다.

구조는 다음과 같아요.

 

switch (조건)

{

case (int값):

실행문

break;

....

default:

}

엄, 한번 보죠.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int stats = 0;
	printf("수를 입력하세요: \n");
	scanf("%d", &stats);
	
	switch (stats)
	{
	case 1:                     //stats가 1이면
		printf("1입니다.");     //출력하고
		break;                 //종료
	case 2:                     //stats가 2면
		printf("2입니다.");     //출력하고
		break;                 //종료
	case 3:                     //stats가 3이면
		printf("3입니다.");     //출력하고
		break;                 //종료
	case 4:                    //stats가 4면
		printf("4입니다.");    //출력하고
		break;                //종료
	default;
		printf("잘못 입력하셧는데요!");
		break;
	}

	return 0;
}

좋아요! 다음과 같이 사용합니다.

만약 break문이 없다면 다음 case로 가서 실행해요. 

 

결과는 다음과 같아요.

수를 입력하세요 : 1
1입니다.
수를 입력하세요 : 2
2입니다.
수를 입력하세요 : 3
3입니다.
수를 입력하세요 : 4
4입니다.

흠.. 

만약 다른 수를 입력했다면

수를 입력하세요 : 1000
잘못 입력하셧는데요!

가 나와요. 

사실 default 뒤에 break;는 필요없어요, 어짜피 제일 끝에 처리되거든요.

사실 default도 필요없으면 안 적어도 됩니다.

 

switch ~ case문은 특정한 숫자만 처리한다고 해서 그닥 범위가 넓을 거 같지는 않지만, 다음과 같은 사용도 가능해요.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	while (1)
	{
		int stats = 0;
		printf("점수를 입력하세요: ");
		scanf("%d", &stats);
		if (stats == 100)      //100일 경우 식의 계산값이 0이 되는 걸 방지
			stats = 99;

		switch (10 - stats / 10)     //stats를 반전시켜 계산, 소수점은 버림(내림)
		{
		case 1:
			printf("A학점입니다.");   //100~90점일 경우 시행
			break;
		case 2:
			printf("B학점입니다.");   //89~80점일 경우 시행
			break;
		case 3:
			printf("C학점입니다.");   //79~70점일 경우 시행
			break;
		case 4:
			printf("D학점입니다.");   //69~60점일 경우 시행
			break;
		case 5:
		case 6:
		case 7:
		case 8:
			printf("E학점입니다.");   //59~20점일 경우 시행
			break;
		default:
			printf("F학점입니다.");   //19~0점일 경우 시행
		}
	}
	return 0;
}

좋아요!

결과값은 안보여줄거에요, 주석에 나와있잖어..

보시면 case 5부터 8까지 비워두고 있는데, 저건 case 5부터 case 8까지를 묶어서 처리하기 위해서에요.

 

switch ~ case문을 이렇게 사용할 수 있는 방법도 있다는 것을 알아두세요!

 

728x90