14 조건문: switch 문으로 다양한 조건 처리하기

  • 6 minutes to read

선택문인 switch 문은 값에 따라서 다양한 제어를 처리할 수 있습니다. 앞서 살펴본 다중 if 문을 사용할 때 조건을 처리할 내용이 많을 경우에 그 대체 구문으로 switch 문을 사용할 수 있습니다. 박용준 강사의 강의에서 switch 문은 switch 선택문, switch 분기문으로도 부릅니다.

> // 선택문(switch 문): switch와 case 그리고 default 키워드를 사용하여 다양한 조건 처리

14.1 switch 문 소개

switch 문의 모양은 다음과 같습니다. 표현식은 줄여서 으로 표현하고 영어로 Expression입니다.

switch (표현식)
{
    case 값1 : 실행문1; break;
    case 값2 : 실행문2; break;
    ...
    default: 실행문n; break;
}

표현식의 결괏값이 '값1'이면 '실행문1'을 수행하고, '값2'면 '실행문2'를 수행하는 식으로 표현식에 맞는 실행문을 수행합니다.

switch 문에는 추가적으로 case 키워드와 default 키워드가 사용되는데요 이를 case 레이블, default 레이블이라고 합니다. case 레이블은 상수(값)가 들어오고, default 레이블은 생략 가능합니다.

14.2 switch 문 사용하기

이번에는 switch 문을 사용해보겠습니다.

코드: switch_expression.c

// switch 문 사용하기
#include <stdio.h>

int main(void)
{
    int x = 2;

    switch (x)
    {
        case 1:
            printf("1입니다.\n"); // x가 1일 때 실행
            break;
        case 2:
            printf("2입니다.\n"); // x가 2일 때 실행
            break;
        default:
            printf("1과 2가 아닙니다.\n"); // 기본값
            break;
    }

    return 0;
}
2입니다.

변수 x의 값을 1로 두면 "1입니다."가 출력되고 x의 값을 2로 두면 "2입니다."가 출력됩니다. 1과 2 이외의 값을 지정하면 default 구문이 실행됩니다. 객관식 문제에서 하나를 선택하는 유형은 switch 문 사용이 편리합니다.

14.3 입력한 값에 따른 출력 구문을 switch 문으로 선택하기

다음은 사용자로부터 정수를 입력 받은 후 1, 2, 3일 경우에는 그에 해당하는 문자열을 출력하고 나머지 정수는 default 레이블에서 지정한 문자열을 출력하도록 하는 예제입니다.

코드: switch.c

#include <stdio.h>

int main(void)
{
    int answer = 0;
    int _ = 0;
    printf("정수를 입력하세요.\n");

    // 정수 하나 입력하고 엔터 입력한 후 answer 변수에 담기
    _ = scanf_s("%d", &answer); _ = getchar();

    // 선택문
    switch (answer)
    {
        case 1:
            printf("1을 선택했습니다.\n");
            break;
        case 2:
            printf("2을 선택했습니다.\n");
            break;
        case 3:
            printf("3을 선택했습니다.\n");
            break;
        default:
            printf("그냥 찍으셨군요.\n");
            break;
    }

    return 0;
}
정수를 입력하세요.
3
3을 선택했습니다.

위 프로그램을 실행 후 원하는 값을 입력 후 그에 해당하는 문자열이 출력되는지 확인해보세요.

14.4 좋아하는 프로그래밍 언어 선택하기

가장 좋아하는 프로그래밍 언어를 물어보는 프로그램을 다음과 같이 switch 문을 사용하여 만들 수 있습니다.

코드: switch_statement.c

#include <stdio.h>

int main(void)
{
    int choice = 0;
    int _ = 0;

    printf("가장 좋아하는 프로그래밍 언어는?\n");
    printf("1. C\t");
    printf("2. C++\t");
    printf("3. C#\t");
    printf("4. Java\n");

    // 사용자로부터 정수 하나를 입력받아 choice 변수에 저장
    _ = scanf_s("%d", &choice); _ = getchar();

    switch (choice)
    {
        case 1:
            printf("C 언어 선택\n");
            break;
        case 2:
            printf("C++ 선택\n");
            break;
        case 3:
            printf("C# 선택\n");
            break;
        case 4:
            printf("Java 선택\n");
            break;
        default:
            printf("C, C++, C#, Java가 아니군요.");
            break;
    }

    return 0;
}
가장 좋아하는 프로그래밍 언어는?
1. C    2. C++  3. C#   4. Java
1
C 언어 선택 

switch 문은 if else 문을 사용해서 구현해도 되지만, 좀 더 간결하게 분기 구문을 표시할 수 있는 장점을 가지고 있습니다.

14.4.1 switch 문을 사용하여 오늘 날씨를 물어보기

오늘 날씨를 숫자로 입력받은 후 그에 해당하는 메시지를 출력하는 예제를 만들어 보겠습니다.

코드: switch_weather.c

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

int main(void)
{
    int weather = 0;
    int _ = 0;
    printf("오늘 날씨는 어떤가요? (맑음(1), 흐림(2), 비(3), 눈(4), ...)\n");

    _ = scanf("%d", &weather);

    switch (weather)
    {
        case 1:
            printf("오늘 날씨는 맑군요.");
            break;
        case 2:
            printf("오늘 날씨는 흐리군요.");
            break;
        case 3:
            printf("오늘 날씨는 비가 오는군요.");
            break;
        default:
            printf("혹시 눈이 내리나요?");
            break;
    }

    return 0;
}
오늘 날씨는 어떤가요? (맑음(1), 흐림(2), 비(3), 눈(4), ...)
1
오늘 날씨는 맑군요.

14.5 case에서 break 생략하기

fall_through.c

#define _CRT_SECURE_NO_WARNINGS // scanf 보안 경고로 인한 컴파일 에러 방지 
#include <stdio.h>

int main(void)
{
    char alphabet; 

    scanf("%c", &alphabet);

    switch (alphabet)
    {
        case 'a': 
        case 'b':
            printf("a 또는 b입니다.\n"); 
            break; 
        default:
            printf("a, b가 아닌 다른 문자입니다.\n");
            break;
    }

    return 0;
}

14.6 장 요약

여러 항목 중 하나를 편하게 선택해주는 선택문인 switch 문을 알아보았습니다. 조건문과 선택문을 알아봤으니 계속해서 반복문을 알아보도록 하겠습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com