본문 바로가기

BackEnd/C

swtich문

반응형

if~else의 중첩을 대신할 수 있는 switch


아래의 swtich 문은 num값이 1이라면 case1 라벨부터 마지막까지 쭉 실행이 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main(void)
{
    int num;
 
    printf("1에서 3 사이의 정수 입력: ");
    scanf("%d"&num);
 
    switch(num)
    {
    case 1://num이 1이면 여기서부터 시작     
        printf("A1 ");
        printf("A2 ");
    case 2://num이 2이면 여기서부터 시작
        printf("B1 ");
        printf("B2 ");
    case 3://num이 3이면 여기서부터 시작
        printf("C1 ");
        printf("C2 ");
    default://이도 저도 아니면 여기서부터 시작 
        printf("Default! \n");
    }
 
    return 0;
}
cs

하지만 아래의 swtich 문은 num값이 1이라면 case1 라벨부터 break 전까지 실행후 빠져나가게 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int main(void)
{
    int num;
 
    printf("정수 입력: ");
    scanf("%d"&num);
 
    switch(num)
    {
    case 1:
        printf("A1 ");
        printf("A2 \n");
        break;
 
    case 2:
        printf("B1 ");
        printf("B2 \n");
        break;
 
    default:
        printf("Default! \n");
    }
 
    return 0;
}
cs


if~else문 대신 switch문을 사용하면 훨씬 간결해 보이는 장점이 있다. 

그리고 또 다른 switch문의 활용을 봐보자.

한줄에 둘 이상의 레이블을 둘 수도 있다. 이 또한 if~else문 보다 훨씬 간결해 보이는 장점이 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <stdio.h>
 
int main(void)
{
    int num;
    printf("정수 입력(1이상 30미만): ");
    scanf("%d"&num);
 
    switch(num)
    {
    case 2case 3case 5case 7:
        printf("1이상, 10미만의 소수입니다. \n");
        break;
 
    case 11case 13case 17case 19:
        printf("10이상, 20미만의 소수입니다. \n");
        break;
 
    case 23case 29:
        printf("20이상, 30미만의 소수입니다. \n");
        break;
 
    default:
        printf("소수가 아닙니다. \n");
        printf("또는 0이하이거나 30이상의 수입니다. \n");
    }
 
    return 0;
}
cs


하지만 한계점도 있다. if~else문에서 처럼 비교연산과 논리연산을 진행할 수 없다.


따라서 적절히 if~else문과 switch문을 선택하여 사용하자.

반응형

'BackEnd > C' 카테고리의 다른 글

반복문  (0) 2019.03.04
스코프(scope)  (0) 2019.03.04
삼항 연산자  (0) 2019.03.03
if~else문  (0) 2019.03.03
scanf함수를 이용한 정수와 실수의 입력  (0) 2019.02.26