C언어 초급 - 6장: 조건문 (6.3 switch-case 문)

2025. 2. 23. 18:58프로그래밍 언어/C

6.3 switch-case 문

C 언어에서 switch-case 문은 여러 개의 경우 중 특정 값과 일치하는 코드 블록을 실행하는 조건문입니다.
if-else if-else 문과 유사하지만, 특정 정수 또는 문자 값과 비교할 때 더 간결하게 사용할 수 있습니다.
또한 break 문default 문을 활용하여 제어 흐름을 관리할 수 있습니다.


1. switch-case 문의 개념

  • switch 문은 변수의 값과 case 문에서 지정한 값이 일치할 때 해당 블록을 실행.
  • break 문을 사용하여 각 case 블록 실행 후 탈출.
  • default 문을 활용하여 일치하는 값이 없을 때 실행할 기본 코드 지정.

2. switch-case 문의 기본 구조

switch (변수) {
    case 값1:
        // 값1과 변수가 일치하면 실행할 코드
        break;
    case 값2:
        // 값2와 변수가 일치하면 실행할 코드
        break;
    default:
        // 위의 모든 값과 일치하지 않을 경우 실행할 코드
}

📌 break 문이 없으면 실행이 다음 case로 넘어감"fall-through" 현상 발생
📌 default 문은 선택 사항이며, 어떤 case에도 해당하지 않을 때 실행됨


3. switch-case 문 예제

3.1 요일 출력 프로그램

사용자가 1~7 사이의 숫자를 입력하면 요일을 출력하는 프로그램입니다.

#include <stdio.h>

int main() {
    int day;

    printf("요일을 선택하세요 (1~7): ");
    scanf("%d", &day);

    switch (day) {
        case 1:
            printf("월요일\n");
            break;
        case 2:
            printf("화요일\n");
            break;
        case 3:
            printf("수요일\n");
            break;
        case 4:
            printf("목요일\n");
            break;
        case 5:
            printf("금요일\n");
            break;
        case 6:
            printf("토요일\n");
            break;
        case 7:
            printf("일요일\n");
            break;
        default:
            printf("잘못된 입력입니다.\n");
    }

    return 0;
}

실행 예시

요일을 선택하세요 (1~7): 3
수요일
요일을 선택하세요 (1~7): 8
잘못된 입력입니다.

📌 설명

  • case 1: printf("월요일\n"); break; → 입력값이 1이면 "월요일" 출력 후 break로 switch 탈출.
  • default: → 1~7이 아닌 값 입력 시 "잘못된 입력입니다." 출력.

4. break 문의 역할

  • switch-case 문에서 break 문이 없으면 실행이 다음 case 문으로 넘어가는 "fall-through" 현상 발생.
  • 이를 방지하려면 각 case 블록 끝에 break 문을 추가.

4.1 break 문이 없는 경우

#include <stdio.h>

int main() {
    int num = 2;

    switch (num) {
        case 1:
            printf("하나\n");
        case 2:
            printf("둘\n");
        case 3:
            printf("셋\n");
        default:
            printf("기타 숫자\n");
    }

    return 0;
}

출력 결과

둘
셋
기타 숫자

📌 설명

  • case 2:에서 "둘"을 출력한 후, break가 없으므로 case 3:과 default:까지 실행됨.
  • 의도치 않은 결과를 방지하려면 break 문을 사용해야 함.

5. default 문의 역할

  • default 문은 어떤 case에도 해당하지 않을 경우 실행되는 블록입니다.
  • default 문을 사용하면 잘못된 입력을 처리할 수 있음.

5.1 default 문을 활용한 예제

#include <stdio.h>

int main() {
    int choice;

    printf("메뉴를 선택하세요 (1~3): ");
    scanf("%d", &choice);

    switch (choice) {
        case 1:
            printf("아메리카노를 선택하셨습니다.\n");
            break;
        case 2:
            printf("카페라떼를 선택하셨습니다.\n");
            break;
        case 3:
            printf("카푸치노를 선택하셨습니다.\n");
            break;
        default:
            printf("잘못된 선택입니다.\n");
    }

    return 0;
}

실행 예시

메뉴를 선택하세요 (1~3): 4
잘못된 선택입니다.

📌 설명

  • default 문이 없으면 case 1~3에 없는 값이 입력될 때 아무 출력도 되지 않음.
  • default 문이 있으므로 "잘못된 선택입니다."가 출력됨.

6. switch-case vs if-else

비교 항목 switch-case 문 if-else 문
비교 대상 정수(int, char) 값과 일치하는 경우 사용 범위, 복합 조건(`&&`, `||`)을 처리 가능
가독성 여러 개의 case를 나열하여 가독성이 높음 복잡한 조건일수록 코드가 길어질 수 있음
속도 비교적 빠름 (switch는 점프 테이블 방식) 조건이 많아지면 비교 연산이 많아질 수 있음
유연성 case 값은 상수(const), 정수(int), 문자(char)만 가능 변수 및 논리 연산 (`&&`, `||`, `>=`, `<=`) 사용 가능

📌 switch-case 문 사용 예시

  • 메뉴 선택 (1~5 숫자로 선택)
  • 특정 문자 ('A', 'B', 'C' 등) 처리
  • 키보드 입력 값 ('w', 'a', 's', 'd' 등)

📌 if-else 문이 더 적절한 경우

  • 범위를 비교하는 경우 (x >= 10)
  • 두 개 이상의 조건을 함께 비교할 경우 (&&, ||)
  • 변수 값을 비교하는 경우 (if (num == a))

7. switch-case 활용 예제

7.1 학점 판별 프로그램 (switch 사용)

점수를 입력받아 A, B, C, D, F 학점을 판별하는 프로그램입니다.

#include <stdio.h>

int main() {
    int score;
    
    printf("점수를 입력하세요: ");
    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");
    }

    return 0;
}

실행 예시

점수를 입력하세요: 85
학점: B

📌 설명

  • score / 10을 사용하여 점수를 10, 9, 8, 7, 6으로 변환.
  • 90~100 → case 10, case 9 → "A" 출력.
  • 60 미만이면 default로 "F" 출력.

8. 정리

  • switch-case 문은 특정 값과 비교할 때 유용.
  • break 문을 사용하여 각 case 실행 후 탈출.
  • default 문을 사용하여 모든 case에 해당하지 않을 때 실행.
  • if-else 문은 범위 비교 및 복합 조건이 필요할 때 사용.