본문 바로가기
개발/C, C++

[c/c++] switch문

by 77monkey 개발자 2023. 8. 21.
반응형

if문 다음으로 확인할 주제는 switch문입니다. 

경우에 따라서는 if문으로 작성하는 것보다 switch문으로 작성하는 것이 더 가독성이 좋고 코드 속도면에서도 빠를 수 있습니다. 

if문에 대해서 혹시 모르실 경우에 아래 페이지를 참고해 주시길 바랍니다. 

2023.08.14 - [개발] - [c/c++] if 문

 

[c/c++] if 문

if문은 아마도 영어 공부를 하면서 처음 접했을 것이다. 영어 뜻이 만약 ~라면, ~일 경우를 생각했는가? 맞다. 내가 접한 언어에서는 모두 if가 존재했다. 그래서 보통 한 언어를 잘하면 다른 언어

77monkey.tistory.com


switch문 형식

switch (변수) {
case 값:
	코드;
    break;
case 값:
	코드;
    break;
...
default: 
	코드;
    break;
}

swich 다음에 나오는 변수에 따라서 case 다음에 나오는 값과 같은 곳 코드를 실행하게 됩니다.

여기서 주의할 점은,, 변수에는 정수가 아니면 올 수가 없습니다. 오해할 수 있는데 문자나 열거형은 정수와 호환이 되기 때문에 가능합니다. 그렇기 때문에 정수, 문자, 열거형은 가능하고, 나머지는 불가합니다.

case 값 다음에 ":" 콜론을 꼭 써주셔야 하고, 코드 다음에는 break문을 잊지 말구 써주셔야 합니다.

아무래도 설명보다는 예시를 보시는 게 훨씬 이해하시는데 도움이 되실 것 같습니다. 자, 같이 보시죠.

 

switch문 예시

#pragma warning (disable:4996)

#include <stdio.h>

int main() {
	int score = 0;

	printf("점수를 입력해 주세요\n");
	printf("점수 입력: ");
	scanf("%d", &score);

	switch (score/10) {
	case 10:
		printf("훌륭해요!\n");
		break;
	case 9:
		printf("훌륭해요\n");
		break;
	case 8:
		printf("멋져요!\n");
		break;
	case 7:
		printf("멋져요\n");
		break;
	default:
		printf("노력해 보아요.\n");
		break;
	}
	
	return 0;
}

점수를 입력 받아서 점수에 따라서 출력문을 다르게 했습니다. 

점수를 입력받아서 10으로 나눈 이유는 95점과 같은 점수가 들어왔을 때, switch문에서 일치하는 곳이 없어서 default인 "노력해 보아요"가 출력되기 때문입니다. 

95점을 10으로 나누면 9가 되고 이는 case 9에 해당하게 되어서 "훌륭해요"가 출력되게 하기 위함입니다. 

case 10, 9, 8, 7 까지 점수와 일치하는지 확인하다가 해당하는 값이 없으면 default 값으로 가게 됩니다. 그래서 "노력해 보아요."가 출력되게 됩니다. 

 

switch문 다양한 사용 방법

위의 예시와 비슷한 코드인데 조금 다릅니다. 

case 10과 case 9 사이에 코드가 없습니다. 

이런 경우에는 어떻게 동작할까요? 네, 맞습니다. case 10인 경우와 case 9인 경우 모두 "훌륭해요"를 출력하게 됩니다. 

이렇게 break문이 없으면 break문을 만날 때까지 case문을 다 실행합니다. 우리 전에 break 문에 배운 것 기억하시죠? break 문은 switch문을 나가게 해주는 구문이기 때문에 꼭 잊지 마시고 쓰셔야 합니다.

#pragma warning (disable:4996)

#include <stdio.h>

int main() {
	int score = 0;

	printf("점수를 입력해 주세요\n");
	printf("점수 입력: ");
	scanf("%d", &score);

	switch (score/10) {
	case 10:
	case 9:
		printf("훌륭해요\n");
		break;
	case 8:
	case 7:
		printf("멋져요\n");
		break;
	default:
		printf("노력해 보아요.\n");
		break;
	}
	
	return 0;
}

문자일 경우에는 어떻게 사용할 수 있을지 확인해 봅시다. 

#pragma warning (disable:4996)

#include <stdio.h>

int main() {
	char input;

	printf("a ~ c 중에 알파벳을 써주세요.\n");
	printf("알파벳 입력: ");
	scanf("%c", &input);

	switch (input) {
	case 'a':
		printf(" %c --> A\n", input);
		break;
	case 'b':
		printf(" %c --> B\n", input);
		break;
	case 'c':
		printf(" %c --> C\n", input);
		break;
	default:
		printf("잘못 입력하셨습니다.\n");
		break;
	}

	
	return 0;
}

문자 a, b, c를 입력 받아서 대문자로 바꿔주는 구문을 만들어봤습니다. 보시는 것처럼 문자를 쓰실 때에는 ' '를 사용하셔야 합니다. 이것 외에는 정수를 사용했을 때와 동일한 것을 알 수 있습니다. 

결과는 다음과 같습니다. 

a ~ c 중에 알파벳을 써주세요.
알파벳 입력: a
 a --> A

 

마무리

switch문을 사용하는 경우에 대해서 알아보았습니다. switch문을 if문으로 바꿔보고 if문을 switch문으로 100% 호환이 되지는 않지만, 가능한 경우에 대해서는 바꿔보는 연습을 해보시면 실력 향상에 큰 도움이 될 것이라고 생각됩니다. 점수를 입력 받았을 때 출력하는 코드에 대해서 if문으로 바꿔보시는 연습을 해보시는 것을 추천합니다. 

반응형

'개발 > C, C++' 카테고리의 다른 글

[c/c++] 1차원 배열 (2)  (0) 2023.08.26
[c/c++] 1차원 배열  (0) 2023.08.25
[c/c++] do while문  (0) 2023.08.20
[c/c++] while문  (0) 2023.08.17
[c/c++] for문 (2)  (1) 2023.08.16