SyntaxHighlighter.all();
IT

[c언어 기초] 조건문 switch 공부

by cottonzero 2019. 12. 1.

Fast Campus의 올인원 패키지: 컴퓨터 공학 5강으로 공부했다.

 

#define _CRT_SECURE_NO_WARNINGS
#include 

int main(void) {
	printf("학점을 입력하세요. ");

	char grade;
	scanf_s("%c", &grade);

	switch (grade) {
	case 'A':
		printf("A 학점입니다.\n");

	case 'B':
		printf("B 학점입니다.\n");

	case 'C':
		printf("C 학점입니다.\n");

	default:
		printf("학점을 바르게 입력하세요.\n");
	}
	system("pause");
}

 

위 코드의 결과는

위와 같다. 

첫 번째 case에만 걸리니까 'A 학점입니다.'만 나올 줄 알았는데?

 

알고 보니 한 case에 걸리면 그 아래 쪽의 모든 것을 만족시킨다고 한다.

 

case 'A' :

 이후로 쭉 한 묶음으로 걸리는 느낌인 것 같다.

 

학점에 'B'를 넣어보면

이렇게 case 'B' : 이후가 모두 나오는 걸 알 수 있다.

 

그렇다면 의도대로, 딱 그 경우에 해당하면 끝나도록 하기 위해서는 아래와 같이 'break;'을 추가하면 된다.

#define _CRT_SECURE_NO_WARNINGS
#include 

int main(void) {
	printf("학점을 입력하세요. ");

	char grade;
	scanf_s("%c", &grade);

	switch (grade) {
	case 'A':
		printf("A 학점입니다.\n");
		break;

	case 'B':
		printf("B 학점입니다.\n");
		break;

	case 'C':
		printf("C 학점입니다.\n");
		break;

	default:
		printf("학점을 바르게 입력하세요.\n");
	}
	system("pause");
}

 

첫 번째 case에 걸리도록 'A'를 입력해주니 아래와 같은 결과가 나왔다.

break;으로 탈출! 원하는 결과가 나왔다.

 

추가 정리 두 가지.

 

1. 첫 줄에 '#define _CRT_SECURE_NO_WARNINGS' 이건 무엇?

 

visual studio 2019 버전을 쓰고 있는데,

이 버전에서는 안전성(?) 문제로 scanf 대신 scanf_s를 써야 한다.

 

여전히 scanf를 쓰고 싶다면 추가하는 코드가 바로 첫 줄 코드인 것이다.

 

이따 검색해야지 하고 그냥 따라적었는데...

몰랐어서 scanf_s 썼네... 하하

 

2. switch (확인 대상) {

   case 값1: //값1에 부합할 때

   case 값2: //값2에 부합할 때

   default: //모든 경우에 해당.

}

해당하는 경우에 걸리면 쭉 모든 코드가 실행되므로

의도에 따라 'break;'을 넣어주어야 한다.

 

왜 이렇게 불편하게 했지 싶었는데 이걸 응용하면 어떤 경우에는 보다 단순한 코드를 짤 수 있을 것 같다.

 

댓글


TOP

TEL. 02.1234.5678 / 경기 성남시 분당구 판교역로