switch 문

정의

  • 지정된 수식의 값에 따라 여러 경우 중 하나를 선택하여 실행한다.
  • 지정된 수식은 그냥 정수값이거나, 정수 결과값을 가지는 계산식일 수 있다.
  • switch, case, default 키워드가 사용된다.

표현방법

1
2
3
4
5
6
7
switch (expr_int) { // 정수값, 혹은 정수 결과값을 가지는 계산식
	case label_1: statement_1; // 정수값이 label_1 일때 실행됨
	case label_2: statement_2; // 정수값이 label_2 일때 실행됨
	...
	default: statement_d; // 위 모둔 case 에 해당하지 않는 경우 실행됨
}
// label : 상수값

주의사항

  • default모든 case 에 해당하지 않는 경우에 실행된다.
  • 별도 break 설정이 되지 않는다면, 일치하는 case가 생겼을 때, 그 다음 나머지 case들은 비교 없이 그냥 수행되며, default 부분도 실행된다.
  • 특정 하나의 case 만 실행시키고 싶을 경우 break 를 사용해 흐름을 제어한다.
  • switch 문에 default 는 없을 수도 있다.

예시

모범 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void something(){
    int score = 0;
    scanf("%d", &score);
    switch (score/10) {
        case 10:
        case 9: printf("학점은 A\n");
                break;
        case 8: printf("학점은 B\n");
                break;
        case 7: printf("학점은 C\n");
                break;
        case 6: printf("학점은 D\n");
                break;
        default: printf("학점은 F\n");
    }
}
1
2
# 입력 : 93
학점은 A

default 선택 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void something(){
    int score = 0;
    scanf("%d", &score);
    switch (score/10) {
        case 10:
        case 9: printf("학점은 A\n");
                break;
        case 8: printf("학점은 B\n");
                break;
        case 7: printf("학점은 C\n");
                break;
        case 6: printf("학점은 D\n");
                break;
        default: printf("학점은 F\n");
    }
}
1
2
# 입력 : 50
학점은 F

case 주의사항

1
2
3
4
5
6
7
8
9
10
11
12
void something(){
    int score = 0;
    scanf("%d", &score);
    switch (score/10) {
        case 10:
        case 9: printf("학점은 A\n");
        case 8: printf("학점은 B\n");
        case 7: printf("학점은 C\n");
        case 6: printf("학점은 D\n");
        default: printf("학점은 F\n");
    }
}
1
2
3
4
5
# 입력 87
학점은 B
학점은 C
학점은 D
학점은 F
  • break 가 없다면, 조건을 만족하는 case 부터 default까지 쭉 수행된다.
  • 이를 폴 스루 (fall through) 라고 한다.

default 가 없을 수도 있다.

1
2
3
4
5
6
7
8
9
10
11
void something(){
    int score = 0;
    scanf("%d", &score);
    switch (score/10) {
        case 10:
        case 9: printf("학점은 A\n");
        case 8: printf("학점은 B\n");
        case 7: printf("학점은 C\n");
        case 6: printf("학점은 D\n");
    }
}
1
2
# 입력 : 50
# 출력 없음

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments