본문으로 바로가기

[C언어] 제어문 #2 switch ~ case

category C 2014. 5. 2. 15:16

switch ~ case

다중 선택문이라고 하며 변수값을 평가해서

해당되는 값에 대해 처리해주기 위해 주로 사용된다.

[문법]

switch (정수변수)

{

case 정수상수1:

    문장1;

    break;

case 정수상수2:

    문장2;

    break;

...

case 정수상수n:

    문장n;

    break;

default:

    디폴트문장;

}

※ break { 중괄호로 시작해서 } 중괄호로 끝나는 부분을 블록이라고 하며 break 는

블록을 탈출한다는 의미이다. 미드 중 prison break 뜻이 무엇인가? 감옥 탈출 아닌가?

 

<유의점>

정수변수에는  char, short, int 만 올 수 있다.

float, double 과 같은 실수형 변수는 올 수 없다.

정수상수에는 1, 'a', 등이 올 수 있으며

1.0f, 3.14 와 같은  실수상수는 올 수 없다.

 

default:부분에는 break;는 불필요하나

반드시 디폴트 문장이 있어야 컴파일 에러가 나지 않는다.

 

예1)

#include <stdio.h>
void main()
{
    printf("1. 짜장면\n"); 
    printf("2. 우동\n"); 
    printf("3. 짬뽕\n"); 
    printf("4. 볶음밥\n"); 
    printf("5. 잡채밥\n"); 
    printf("6. 탕수육\n"); 
    printf("7. 깐풍기\n");

    int iSelect; 
    scanf("%d", &iSelect);
    if (1 == iSelect)
    {
        printf("짜장면을 주문하셨습니다.\n");
    }
    else if (2 == iSelect)
    {
        printf("우동을 주문하셨습니다.\n");
    }
    else if (3 == iSelect)
    {
        printf("짬뽕을 주문하셨습니다.\n");
    }
    else if (4 == iSelect)
    {
        printf("볶음밥을 주문하셨습니다.\n");
    }
    else if (5 == iSelect)
    {
        printf("잡채밥을 주문하셨습니다.\n");
    }
    else if (6 == iSelect)
    {
        printf("탕수육을 주문하셨습니다.\n");
    }
    else if (7 == iSelect)
    {
        printf("깐풍기을 주문하셨습니다.\n");
    }
    else
    {
        printf("잘못된 선택입니다.\n");
    }
}

 

switch ~case 문으로 고치면 아주 간결하게 만들 수 있다.

#include <stdio.h>
void main()
{
    printf("1. 짜장면\n"); 
    printf("2. 우동\n"); 
    printf("3. 짬뽕\n"); 
    printf("4. 볶음밥\n"); 
    printf("5. 잡채밥\n"); 
    printf("6. 탕수육\n"); 
    printf("7. 깐풍기\n");

    int iSelect; 
    scanf("%d", &iSelect);
    switch (iSelect)
    {
    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;
    case 6:
        printf("짜장면을 주문하셨습니다.\n");
        break;
    case 7:
        printf("짜장면을 주문하셨습니다.\n");

     break;
    default: 
        printf("잘못된 선택입니다.\n");
    }
}

 

<질문>

break; 문장을 넣어주지 않으면 어떻게 될까? 

 

 

 

예2)

#include <stdio.h>
#include <conio.h> // for getch()
void main()
{
    puts("  w");
    puts("a s d");
    char cKey = getch(); 
    putchar(cKey);  // putch(cKey); 를 해도 무방
    printf("\n"); 
    switch (cKey)
    {
    case 'w':
        puts("위로 이동");
        break;
    case 'a':
        puts("좌로 이동");
        break;
    case 's':
        puts("아래로 이동");
        break;
    case 'd':
        puts("우로 이동");
        break;
    default:
        puts("잘못된 입력값입니다.");
    }
}

 

<질문>

만약에 Caps Lock On 상태가 되어

대문자 W,A,S,D 값을 키보드값으로 받는다면

"잘못된 입력값입니다." 라는 메시지를 출력하는게 좋을까?

 

<실습>

점수를 입력받아 0~100 점을 벗어나면, "잘못된 입력입니다"를 출력하고

0~100 점 사이의 점수를 입력받으면

100~90 A학점

     ~80 B학점

     ~70 C학점

     ~60 D학점

     ~  0 F학점

해당 학점을 출력하세요!

switch case 문을 사용해서 작성해야합니다.