본문 바로가기

Programming/C

[ProjectH4C] 코딩도장 Unit 26 Write-Up

Switch

조건에 따라 다른 동작을 해주는 문법으로 if문이 있다. if문의 기본 구조는 다음과 같다.

 

if(조건 1){

    내용 1

}

else if(조건 2){

    내용 2

}

else{

    내용 3

}

 

if문은 여러가지 경우에 따른 동작을 사용할 수 있지만, 각각의 조건식이 참이거나 거짓인 경우 두 가지만 처리할 수 있다. else if를 사용해 여러개의 조건을 작성해서 처리할 수 있지만, 각각의 조건식들을 모두 지정해주어야 하기 때문에 번거로운 감이 없잖아 있다. 이러한 경우, switch 문을 사용하여 다소 편하게 사용할 수 있다. switch의 기본 구조는 다음과 같다.

 

switch(변수){

case 조건1:

    내용1

    break;

case 조건2:

    내용2

    break;

case 조건3:

    내용3

    break;

default:

    내용1

    break;

}

 

각각의 case는 if문과 동일한 역할을 한다. 다만, if문의 조건식에는 범위가 들어갈 수 있었지만 case의 조건에는 범위값이 아닌 switch문에 쓰인 변수와 형태가 같은 어떠한 값이 들어가야 한다. 예를 들어 점수를 입력받는 코드를 작성할 때 if문은 (score>=0 && score<=100)처럼 입력 받은 점수가 제대로 된 점수인지 확인할 수 있지만, switch문을 사용하면 case 10: 과 같이 입력한 점수가 해당 값인 경우에 대해서만 처리할 수 있다. 그렇기 때문에 switch문은 처리해야 하는 값이 적고, 조건은 많을 때 유리하게 사용할 수 있다.

default는 if문의 else와 같은 의미로, 위의 조건에 모두 해당하지 않을 경우 실행된다. 

switch구문은 각각의 case의 마지막줄에 break가 들어있는데, break 명령문은 해당 조건문, 반복문을 곧바로 탈출하는데 쓰인다. 만약 각각의 case에 break가 없다면, 해당 case가 끝난 후, 아래의 case까지 모두 실행되기 때문에 특별한 경우가 아니라면 case의 마지막 줄에는 항상 break를 사용해주어야 한다. 만약, 정수를 입력 받고, 정수가 1일 때와 2일 때 실행 할 내용이 동일하다면, 다음과 같이 break를 생략하여 작성할 수 있다.

 

switch(num1){

case 1:

case 2:

    내용

    break;

}

 

1이 입력되면, case 1:부터 break까지 작동하므로 내용이 실행된다. case2를 입력하여도 내용이 실행되고 break를 통해 종료되게 된다. 이러한 경우에는 break를 생략하여 동일한 코드를 한번만 작성할 수 있게 된다.

 

case 내부에서 변수를 선언해야 하는 경우엔, 해당 케이스를 꼭 중괄호로 묶어주어야 한다. 묶어주지 않으면 컴파일 에러가 난다.

 

switch로 판별하는 변수는 정수형만 사용할 수 있다. 단, 문자형 변수도 정수로 표현이 가능하므로, 문자형 변수도 사용할 수 있다.

 

#26.6 퀴즈

case 뒤에는 세미콜론(;)이 아닌 콜론(:)이 들어가야 한다. 답은 e.

case 'b' 부터 break까지 실행된다. 하지만 case 'b' 이후엔 break가 없기 때문에 끝까지 출력이 된다. 답은 e.

switch에는 정수형, 문자형 변수만 사용 가능하고 실수형은 사용 불가하다. 답은 a, e.

 

 

#26.7 연습문제: switch 분기문 사용하기

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
    int num1 = 0;

    scanf("%d", &num1);

    switch (num1)
    {
    case 1 << ①_____:
        printf("2\n");
        break;
    case 1 << ②_____:
        printf("4\n");
        break;
    case 1 << ③_____:
        printf("8\n");
        break;
    default:
        printf("default\n");
        break;
    }

    return 0;
}

2가 입력되면 2를, 4가 입력되면 4를, 8이 입력되면 8을 출력해야 한다.

1을 1, 2, 3번 시프트하면 각각 2, 4, 8이 되기 때문에 밑줄엔 각각 1, 2, 3이 들어가면 된다.

 

#26.8 심사문제: 음료수 자판기 만들기

입력된 문자가 f, c, p인 경우에만 처리를 해주어야하기 때문에 switch문으로 작성한다. 각각 case 'f':, case 'c':, case 'p':로 작성하며, 그 때의 출력을 지정해주고 break하면 된다. 코드는 아래와 같다.

 

case 'f':
    printf("환타 \n");
    break;
case 'c':
    printf("콜라 \n");
    break;
case 'p':
    printf("포카리스웨트 \n");
    break;
default:
    printf("판매하지 않는 메뉴 \n");
    break;