본문 바로가기

C

([C언어] 6강) switch문과 break

 

이번 강좌에서는 저번 강좌 if문에 이어서 또다른 분기문

switch문을 배워보도록 하겠습니다

스위치문은 설명하자면 흔히 우리가

"케바케" : "케이스 바이 케이스" 라는 말을 많이하죠

그 케이스 바이 케이스입니다! 하나의 값을 넘겨주고

그 값이 뭐냐에따라 코드를 실행하도록 해주는 기능입니다

사용법은

switch(값)
{
    case value:
        코드
}

이런식으로 하시면 됩니다.

 

만약에 제가 게임에서 메뉴를 만든다고 칩시다

숫자 1을 입력하면 게임이 시작되야할거고

2를 입력하면 옵션이 떠야할거고

3을 입력하면 랭킹이 떠야할거고

4를 입력하면 게임이 종료돼야겠죠?

 

전부다 if문으로 짜실건가요?

보기가 너무 불편하겠죠

 

그래서 우리는 switch를 쓸겁니다

gamePlay라는 함수랑

option이라는 함수랑

ranking이라는 함수랑

gameExit이라는 함수가 있다고 칩시다

이거를 사용자한테 1~4의 수를 입력받아

적절한 타이밍에 호출해줘볼게요

#pragma warning(disable:4996)
#include <stdio.h>

int main()
{
    int input;
    
    printf("1.게임시작\n2.옵션\n3.랭킹\n4.게임종료\n 무엇을 하시겠습니까? ");
    scanf("%d",&input);
    switch(input)
    {
        case 1:
            gamePlay();
        case 2:
            option();
        case 3:
            ranking();
        case 4:
            gameExit();
    }
}

이렇게 해주면 됩니다!

물론 여러분이 이 코드를 복사 붙혀넣기로 실행하면

gamePlay, option, ranking, gameExit같은 없는 함수를 썼으니 오류가 나겠지만요!

 

설명해 드리자면

switch문에 괄호에 input을 넣었죠?

그리고 case 1:이렇게 했으니

input이 1인 케이스일때 라는 말입니다.

case 2: 이건 input이 2인 케이스일때 라는말이겠죠?

switch문의 case는 다른 비슷한것들과 다르게

중괄호 {} 를 쓰지 않습니다

 

case 1:과 case 2:사이의 모든 코드는 case 1일때 실행되는 코드라고 보시면 됩니다.

꼭 1,2,3,4가 아니여도 됩니다 순서도 일정하지 않아도 되구요!

 

예를들어 게임 시작코드를 65

게임종료 코드를 35라고 한다면 저 코드를

#pragma warning(disable:4996)
#include <stdio.h>

int main()
{
    int input;
    
    printf("65.게임시작\n2.옵션\n3.랭킹\n35.게임종료\n 무엇을 하시겠습니까? ");
    scanf("%d",&input);
    switch(input)
    {
        case 65:
            gamePlay();
        case 2:
            option();
        case 3:
            ranking();
        case 35:
            gameExit();
    }
}

이렇게 바꿔도 된다는 말입니다!

그럼 이 스위치문의 작동 원리를 알아보겠습니다

 

스위치문은 그냥 if문이 여러개 있는거다 라고 보시면 됩니다

switch(a)
{
    case 1:
        //코드
    case 2:
        //코드
    case 3:
        //코드
}

이런식의 스위치 문은

if( a == 1 )
{
    //코드
}
if( a == 2 )
{
    //코드
}
if( a == 3 )
{
    //코드
}
if( a == 4 )
{
    //코드
}

이것과 같습니다. 어라 그럼 우리가 if문강좌에서 봤던대로

a가 1일때 if문에서

a를 2로 바꿔주면

그 다음 a가 2일때 if문도 참이돼서 실행되겠네요?

 

맞습니다.

그래서 아래와 같은 코드를 보시죠

 

switch( a )
{
    case 1:
        a = 2;
        printf("A");
    case 2:
        a = 3;
        printf("B");
    case 3:
        a = 4;
        printf("C");
}

이런식으로 해놓고 처음에 a가 1이었다고 봅시다

ABC가 모두 화면에 출력되게 됩니다.

 

 

그럼 이런 문제를 해결하기 위해서 어떻게 해야할까요?

이번에는 break를 배워보겠습니다.

 

우선 break를 설명하기에 앞서

브레이크는 함수와 달리 어디서나 호출할수 있는 기능이 아닙니다

쉽게 얘기하자면 if문에서는 break를 쓸 수 없어요

break를 쓸수 있는 기능은 정해져 있으니

하나씩 강좌를 늘려가면서 break를 쓸수 있는 기능은

쓸수 있다고 알려드릴게요!

 

break는 브레이크! 즉 멈추다! 라는뜻인데요

현재 진행 중인 기능을 멈추고 나가겠다 라는 뜻입니다

 

switch( a )
{
    case 1:
        a = 2;
        printf("A");
    case 2:
        a = 3;
        printf("B");
    case 3:
        a = 4;
        printf("C");
}

이 상태에서 a가 1인상태에서 이 스위치 문이 돌면

A만 출력되게 바꾸고싶습니다! 어떻게해야할까요?

스위치문에서는 break를 사용할수 있습니다

case가 1일때 코드들을 다 수행한 후

스위치 문을 탈출하도록 break를 넣어주면 되겠네요!

switch( a )
{
    case 1:
        a = 2;
        printf("A");
        break;
    case 2:
        a = 3;
        printf("B");
        break;
    case 3:
        a = 4;
        printf("C");
        break;
}

이렇게 하면 되겠네요 ㅎㅎ

그리고 스위치문에 각 case마다 마지막엔 break넣기를 필수로 하는것으로 규칙을 정할게요

 

왜냐하면 일부 언어에서는 스위치문의 케이스에 브레이크가 없으면 에러를 내주는 언어도 있거든요!

케이스의 끝에는 break를 꼭 쓰는것으로 규칙 정한겁니다!

 

아까 그 게임 메뉴를 지금 말한 규칙대로 바꾸면!

#pragma warning(disable:4996)
#include <stdio.h>

int main()
{
    int input;
    
    printf("1.게임시작\n2.옵션\n3.랭킹\n4.게임종료\n 무엇을 하시겠습니까? ");
    scanf("%d",&input);
    switch(input)
    {
        case 1:
            gamePlay();
            break;
        case 2:
            option();
            break;
        case 3:
            ranking();
            break;
        case 4:
            gameExit();
            break;
    }
}

이렇게 해놓으면 되겠네요!

분명 말하지만 저기있는 break는 case를 탈출하는것이 아니라

switch문 자체를 탈출하는겁니다 참고하세요!

 

만약

 

코드1

break;

코드2

 

이런식의 코드를 짜셨다면

코드 1은 실행되겠지만

코드2는 실행되지않습니다

바로위의 break때문에 이미 종료됐기 때문이죠

 

자 그럼 이번에는 스위치 문에 쓸수있는

case말고 하나 더 있습니다

default인데요

case를 쓰듯이

 

default: 라고만 넣어주시면 되구요

default는 스위치 문 하나당 한개만 쓸수있고

switch(a)
{
    case 1:
        //코드
    case 2:
        //코드
    case 3:
        //코드
    default:
        //코드
}

이렇게 하신다면 a가 1도 아니고 2도 아니고 3도 아닐때

default를 실행하게 됩니다

 

자 그럼 이번 강좌는 여기까지 하도록 하겠습니다

스위치는 현업에서 많이쓰이는 편은 아니지만 그래도 외워야하는

핵심 기능중에 하나이니 꼭 외워주세요!