Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 13 [조건문2 - switch문]

2018. 10. 17. 16:30

 제 13강) 조건문2 - Switch문

조건문의 두번째 시간입니다.

바로 "Switch문"에 대해서 배울건데요.

"switch case문"이라고 말하기도 합니다.

 

 

 1) switch case 문

스위치문은 if문과 거의 비슷합니다.

/* 사용법 */
switch(조건_변수)
{
    case 조건1:            // if와 같음
        // 내용~~~
        break;
    case 조건2:            // else if와 같음
        // 내용~~~
        break;
    ...
    case 조건n:            // else if와 같음
        // 내용~~~
        break;
    default:            // else와 같음
        // 내용~~~
        break;
}

사용법은 위와 같습니다.

 

이때 "조건_변수"는 무조건 정수형이어야 합니다.

(C99 표준 6.8.4.2.1에 "The controlling expression of a switch statement shall have integer type."라고 명시되어 있습니다.)

 

if문과 거의 비슷하지만 if문의 경우에는 내용이 끝나면 나머지 조건을 무시하지만 switch문의 경우에는 해당 조건이 만족하면 그 이후의 조건(case)을 전부 참이라고 생각하고 실행하게 됩니다.

 

즉, 위와 같이 실행을 하게 되는 것이죠.

 

그래서 switch case문에는 "break"라는 탈출포인트를 넣어서 사용합니다.

위의 switch문 소스에 break를 넣게 되면

int num = 5;

switch (num)
{
    case 4:
        printf("입력한 수는 4 \n");
        break;
    case 5:
        printf("입력한 수는 5 \n");
        break;
    case 6:
        printf("입력한 수는 6 \n");
        break;
}

// [실행 결과]
// 입력한 수는 5

num의 조건에 맞는 "case 5"의 실행소스만 실행하게 되고 "break" 즉, switch문을 빠져나가게 됩니다.

 

 break
break가 있는 스코프(범위)를 빠져나가게 됩니다.
(즉, 위의 경우에는 스코프가 switch문이 됨으로 break가 걸리면 switch문을 빠져나가게 됩니다.)

 

예제를 봅시다.

#include <stdio.h>
 
int main(void) 
{
    int num = 14;
 
    printf("Break가 있는 Switch 문 \n");
    switch (num)
    {
        case 13:
            printf("num = 13 \n");
            break;
        case 14:
            printf("num = 14 \n");
            break;
        case 15:
            printf("num = 15 \n");
            break;
        case 16:
            printf("num = 16 \n");
            break;
        default:
            printf("선언되지 않은 숫자 \n");
            break;
    }
 
    printf("\nBreak가 없는 Switch 문 \n");
    switch (num)
    {
        case 13:
            printf("num = 13 \n");
        case 14:
            printf("num = 14 \n");
        case 15:
            printf("num = 15 \n");
        case 16:
            printf("num = 16 \n");
        default:
            printf("선언되지 않은 숫자 \n");
    }
    return 0;
}

아주 간단한 예제입니다.

break가 있는 switch문과 없는 switch문으로 만든 예제이죠.

 

실행결과는 위와 같습니다.

 

 default
if~else if~else문에서 else과 같은 기능으로 case에 정의되지 않은 조건이 나올 경우에 실행되는 구문입니다.
이 default에는 break를 쓰지 않아도 상관은 없습니다.

 

 

 2) case 중복

스위치문에서 case를 중복시킬 수 있습니다.

#include <stdio.h> 
int main(void) 
{ 
    int num = 5; 
    switch (num) 
    { 
        case 3: 
        case 4:
        case 5: 
            printf("num은 3 또는 4 또는 5 입니다. \n"); 
            break; 
        case 6: 
        case 7: 
        case 8: 
            printf("num은 6 또는 7 또는 8 입니다. \n"); 
            break; 
        default: 
            printf("선언되지 않은 숫자 \n"); 
    } 
    
    return 0;
}

 

이렇게 case문이 중복이 될 수 있죠.

9번줄은 num이 3, 4, 5 즉, (num >= 3 || num <= 5)의 조건과 같게 됩니다(정수일 경우에만)

 

실행결과는 위와 같습니다.

 

 

 3) 범위 조건

스위치문에서도 범위를 나타낼 수 있습니다.

 

 1. case 중복 사용

방금 위에서 봤던 case 중복을 이용하여 표현이 가능합니다.

(정수형)

 

 2. ... 사용 (비표준)

이 방법은 "GCC"나 "CLang"을 사용하는 IDE에서 사용 가능한 방법으로 비표준(C언어 표준안에 없는 기능)으로 MS에서 만든 "Visual Studio"에서는 사용할 수 없는 방법입니다.

#include <stdio.h>
 
int main(void) 
{
    int num = 5;
 
    switch (num)
    {
        case 0 ... 5:
            printf("0이상 5이하 \n");
            break;
        case 6 ... 10:
            printf("6이상 10이하 \n");
            break;
        default:
            printf("범위를 벗어남 \n");
            break;
    }
    return 0;
}

이런 방법으로 GCC에서는

(웹 IDE 혹은 리눅스(GCC, CLang 사용) 같은 경우)

 

이렇게 잘 돌아가지만

 

Visual Studio에서는 처음부터 사용이 불가능 합니다.

(비 표준이기 때문에 넣지 않은것같습니다.)

(물론 표준이어도 MS는 잘 안넣긴하지만..)

 

 

 번외) if문과 Switch문

그럼 언제 if문을 사용해야하고 언제 switch문을 사용해야할까요?

 

범위를 가지고 조건을 검사해야한다면 if문이 좋고, 값이 정해져있다면 switch로 하는 것이 좋습니다만,

최근에 C를 엄청 파고들어서 배우게 되었는데 switch문이 if문보다 성능이 보편적으로 좋습니다.

(이 부분은 좀 깊은 부분입니다.)

 

그래서 어떤 값이 일정하게 정해져 있다면(범위의 형식이 아닌) 가급적 switch문으로 작성하는 것이 좋습니다.

 

아래의 링크는 한번쯤 읽어보면 좋은 글들입니다.

 

 

Is 'switch' faster than 'if'?

Is a switch statement actually faster than an if statement? I ran the code below on Visual Studio 2010's x64 C++ compiler with the /Ox flag: #include <stdlib.h> #include <stdio.h> #incl...

stackoverflow.com

 

 

switch vs if 어떤 때 어느게 효율적인가요? | KLDP

저는 조건문이 4개 이하이면 그냥 if, else if 로 하고, 그 이상이면 switch case 문을 사용하고 있습니다. 그냥 짧은 것은 switch문 쓰면 너무 소스가 길어져서.. 그런데, 어떤게 어느때 사용해야 제대로

kldp.org

 

 

C/C++ if 구문과 switch 구문의 효율성

※ 아래 어셈블리 구문들은 Intel 64 bit, Visual Studio 2013 Community 버전에서 컴파일되었습니다. switch-case 구문은 C/C++에서 조건문이 상수인 경우에 사용할 수 있는 조건 분기문이다. 조건문에 변수도

oojjrs.tistory.com

 
 다음시간에는

반복문에 대해서 알아보도록 하겠습니다.

저작자표시 비영리 변경금지 (새창열림)

'Study > C언어' 카테고리의 다른 글

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 15 [반복문2 - While]  (0) 2018.10.17
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 14 [반복문1 - For]  (0) 2018.10.17
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 12 [조건문1 - if문]  (0) 2018.10.17
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 11 [진수(진법) 그리고 형변환]  (0) 2018.10.17
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 09 [주석과 상수]  (0) 2018.10.17
'Study/C언어' 카테고리의 다른 글
  • 처음하시는 분들을 위한 C언어 기초강의 시즌2 - 14 [반복문1 - For]
  • 처음하시는 분들을 위한 C언어 기초강의 시즌2 - 12 [조건문1 - if문]
  • 처음하시는 분들을 위한 C언어 기초강의 시즌2 - 11 [진수(진법) 그리고 형변환]
  • 처음하시는 분들을 위한 C언어 기초강의 시즌2 - 09 [주석과 상수]
Eskeptor
Eskeptor
Eskeptor
Hello World
Eskeptor
전체
오늘
어제
  • 분류 전체보기 (138)
    • Computer (5)
      • Linux (1)
      • Hardware (2)
      • Software (0)
      • Tips (1)
      • Website (0)
    • Mobile (1)
      • Application (1)
    • Study (108)
      • Android (9)
      • C언어 (45)
      • C++ (17)
      • Unity 5(유니티5) (11)
      • Qt 프로그래밍 (2)
      • MFC (12)
      • C#, Winform (12)
    • My World (24)
      • OpenPad(Android) (12)
      • 한글 패치 (1)
      • C#으로 만든 귀요미들 (5)
      • MFC로 만든 귀요미들 (6)
    • Life Goes On (0)
      • Hip Hop (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 배열
  • openpad
  • 슈팅게임
  • Tetris
  • 만들기
  • 자바
  • C#
  • 유니티
  • MFC
  • 강의
  • 안드로이드
  • Android
  • C언어
  • 비행기
  • 기초
  • 초보
  • 강좌
  • 왕초보
  • c++11
  • 포인터
  • 기본
  • 오픈패드
  • 메모장
  • 테트리스
  • Unity
  • 알고리즘
  • 프로그래밍
  • Java
  • 자료구조
  • C++

최근 댓글

최근 글

hELLO · Designed By 정상우.
Eskeptor
처음하시는 분들을 위한 C언어 기초강의 시즌2 - 13 [조건문2 - switch문]
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.