프로그래밍언어/C언어[초급]

[C언어][초급] Chapter26. 조건문 – switch 문 사용법과 특징

about_IT 2025. 4. 17. 09:13

if문보다 더 간단하게 쓸 수는 없을까?
조건이 여러 개인 경우 대부분 if-else if 문을 사용하죠.
하지만 값이 정해진 변수(예: 숫자, 문자)에 따라 분기하는 경우에는 더 간단하고 보기 쉬운 방법이 있습니다.
바로 switch 문입니다.


● switch 문이란?

switch 문은 변수의 값을 기준으로 미리 정해둔 여러 경우(case) 중 하나를 선택해서 실행하는 조건문입니다.
값이 정확히 일치하는 경우만 실행되며, 주로 int, char 같은 정수형 값에 사용됩니다.


● 기본 구조

switch (변수) {
    case 값1:
        실행문1;
        break;
    case 값2:
        실행문2;
        break;
    ...
    default:
        기본 실행문;
}
  • 변수의 값이 case 값과 일치하면 해당 블록이 실행됨
  • break는 실행을 멈추고 switch문을 빠져나오기 위한 키워드
  • 일치하는 case가 없으면 default가 실행됨 (생략 가능하지만 있는 게 좋음)

● 예제: 숫자에 따라 요일 출력

int day = 3;

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

● break가 없다면?

int num = 2;

switch (num) {
    case 1:
        printf("One\n");
    case 2:
        printf("Two\n");
    case 3:
        printf("Three\n");
}

출력 결과:

Two  
Three

break가 없으면 다음 case로 흘러내려가는 현상(fall-through) 발생
그래서 각 case마다 반드시 break를 써주는 게 일반적입니다.


● switch문은 어떤 값에 쓸 수 있을까?

  • int, char, enum 등 정수형 값에만 사용 가능
  • float, double, string 등은 사용할 수 없음

● switch vs if-else


항목 switch문 if-else문
대상 특정 정수 값 (int, char 등) 어떤 조건식이든 가능
가독성 분기 수가 많을 때 더 깔끔 조건이 다양하거나 범위일 땐 유리
fall-through 가능 (break 없으면) 불가능 (하나만 실행됨)

● 정리하며

switch 문은 특정 값에 따라 실행할 코드를 나눌 때 매우 유용한 조건문입니다.
특히 메뉴 선택, 숫자 입력, 문자 판단 등 고정된 선택지에 대한 분기에 적합합니다.

 

break를 빠뜨리면 예상과 다른 흐름이 생길 수 있으니 꼭 주의하고,
default도 가능한 넣어서 예외 처리까지 깔끔하게 마무리해보세요!

 

실습 문제

아래 문제는 직접 코드를 작성해보고, 실행 결과를 확인한 후 스스로 정답을 유추해보는 형태입니다.
정답은 바로 아래에서 확인할 수 있습니다.

 

문제 1

정수형 변수 num의 값에 따라 아래와 같이 출력되도록 switch 문을 작성해보세요.

  • 1: "하나"
  • 2: "둘"
  • 3: "셋"
  • 그 외: "지원하지 않는 숫자입니다."

 

문제 2

다음 코드의 출력 결과는 무엇인가요?

int x = 2;

switch (x) {
    case 1:
        printf("A\n");
    case 2:
        printf("B\n");
    case 3:
        printf("C\n");
}

 

문제 3

변수 ch에 문자가 저장되어 있습니다. ch가 'a'이면 "사과", 'b'이면 "바나나", 'c'이면 "체리"를 출력하고, 그 외의 경우에는 "기타 과일"을 출력하도록 코드를 작성해보세요.

 

문제 4

아래 코드에서 "목요일"만 출력되도록 break 문을 추가해보세요.

int day = 4;

switch (day) {
    case 1:
        printf("월요일\n");
    case 2:
        printf("화요일\n");
    case 3:
        printf("수요일\n");
    case 4:
        printf("목요일\n");
    case 5:
        printf("금요일\n");
}

 

문제 5

다음 중 올바르게 작성된 switch 문은 어느 것인가요?

 

A.

switch (x) {
    case 1:
        printf("1입니다");
        break;
    case 2:
        printf("2입니다");
        break;
}

 

B.

switch (y > 5) {
    case 1:
        printf("크다");
        break;
    default:
        printf("작거나 같다");
}

 

C.

switch (z) {
    case 'a':
        printf("알파벳 a입니다.");
        break;
}

 

D.

switch (temp) {
    case 36.5:
        printf("정상 체온");
        break;
}






▶ 정답 확인하기

 

정답 1

int num = 2;

switch (num) {
    case 1:
        printf("하나\n");
        break;
    case 2:
        printf("둘\n");
        break;
    case 3:
        printf("셋\n");
        break;
    default:
        printf("지원하지 않는 숫자입니다.\n");
}

 

정답 2

출력 결과:  
B  
C  
→ break 문이 없으므로 2부터 끝까지 모두 실행됩니다.

 

정답 3

char ch = 'b';

switch (ch) {
    case 'a':
        printf("사과\n");
        break;
    case 'b':
        printf("바나나\n");
        break;
    case 'c':
        printf("체리\n");
        break;
    default:
        printf("기타 과일\n");
}

 

정답 4

int day = 4;

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;
}

 

정답 5

정답: A, B, C

설명:

  • A: 전형적인 올바른 switch 문
  • B: y > 5는 int 값이므로 case 1과 default로 처리 가능
  • C: 문자 'a'는 정수형(char)로 사용 가능
  • D: switch문에서 실수형(float)은 사용할 수 없습니다. → 오류