Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 switch문 완벽 가이드: switch-case 문법과 사용 예제

C 언어의 switch문은 하나의 변수를 여러 값 목록과 차례대로 비교하여 일치 여부를 판단하는 조건문입니다. 비교 대상이 되는 각각의 값을 케이스(case)라고 부르며, switch에 전달된 변수는 각 switch case와 순서대로 검사됩니다.

switch문 기본 문법

C 프로그래밍 언어에서 switch문의 기본적인 작성 형식은 다음과 같습니다.

switch(expression) {
    case constant-expression :
        statement(s);
        break; /* 선택 사항 */
    case constant-expression :
        statement(s);
        break; /* 선택 사항 */
        /* case 문은 원하는 만큼 여러 개 사용 가능 */
    default : /* 선택 사항 */
        statement(s);
}

switch문의 주요 규칙

  • switch문에서 사용되는 표현식(expression)은 반드시 정수형(integral type) 또는 열거형(enumerated type)이어야 합니다. 클래스 타입의 경우, 해당 클래스가 정수형이나 열거형으로 변환되는 단일 변환 함수를 가지고 있어야 합니다.

  • 하나의 switch 안에는 원하는 만큼 많은 case 문을 포함할 수 있습니다. 각 case 뒤에는 비교할 값과 콜론(:)이 붙습니다.

  • 각 case의 상수 표현식(constant-expression)은 switch에 사용된 변수와 동일한 데이터 타입이어야 하며, 상수 또는 리터럴 값이어야 합니다.

  • switch 대상 변수가 특정 case의 값과 일치하면, break 문을 만날 때까지 해당 case 이후의 모든 문장이 실행됩니다.

  • break 문에 도달하면 switch문이 즉시 종료되고, 프로그램의 제어 흐름은 switch문 바로 다음 줄로 이동합니다.

  • 모든 case에 반드시 break가 있어야 하는 것은 아닙니다. 만약 break가 없다면, 제어 흐름은 break를 만날 때까지 그 아래의 후속 case들로 계속 넘어가게 됩니다. 이를 폴스루(fall-through)라고 합니다.

  • switch문에는 선택적으로 default case를 둘 수 있으며, 이는 반드시 switch문의 맨 끝에 위치해야 합니다. default case는 어떤 case도 일치하지 않을 때 특정 작업을 수행하는 데 사용되며, 별도의 break는 필요하지 않습니다.

예제 코드

아래 예제는 학점(grade) 문자에 따라 서로 다른 메시지를 출력하는 switch문의 실제 사용 방법을 보여줍니다.

#include <stdio.h>
int main () {
    /* 지역 변수 선언 */
    char grade = 'B';
    switch(grade) {
        case 'A' :
            printf("Excellent!\n" );
            break;
        case 'B' :
        case 'C' :
            printf("Well done\n" );
            break;
        case 'D' :
            printf("You passed\n" );
            break;
        case 'F' :
            printf("Better try again\n" );
            break;
        default :
            printf("Invalid grade\n" );
    }
    printf("Your grade is %c\n", grade );
    return 0;
}

실행 결과

Well done
Your grade is B

위 예제에서 변수 grade의 값은 'B'이므로, case 'B'case 'C'가 함께 묶인 블록이 실행되어 "Well done"이 출력됩니다. 이처럼 여러 case를 하나로 묶으면 동일한 처리를 공유할 수 있어 코드가 더욱 간결해집니다.