스위치…C의 사례(C의 스위치 문)와 예제

⚡ 스마트 요약

C 언어의 switch 문은 하나의 표현식을 여러 case 레이블과 비교하여 일치하는 블록을 실행합니다. 따라서 프로그램이 여러 고정된 정수 또는 문자 값 중에서 선택해야 할 때 긴 if-else 문을 사용하는 것보다 더 깔끔한 대안을 제공합니다.

  • 🔀 다방향 분기: switch 문은 하나의 표현식을 테스트하고 일치하는 case 레이블로 이동합니다.
  • 🏷️ 케이스 라벨: 각 경우는 콜론으로 끝나는 고유한 상수 정수 또는 문자 레이블을 사용합니다.
  • Break 키워드: break 문은 case 문을 종료합니다. break 문이 없으면 실행이 계속 진행됩니다.
  • 🧩 기본 사례: 선택적 기본 블록은 표현식과 일치하는 케이스 레이블이 없을 때 실행됩니다.
  • 📋 스위치 규칙: 사례별 레이블은 고정되어 있으며 고유하게 유지되고, 기본 레이블은 하나만 허용됩니다.

C의 Switch 문

C의 Switch 문이란 무엇입니까?

C 언어의 switch 문은 변수의 값을 여러 case와 비교합니다. 일치하는 case를 찾으면 해당 case와 관련된 명령 블록이 실행됩니다.

스위치 블록의 각 케이스에는 식별자라고 하는 서로 다른 이름/번호가 있습니다. 사용자가 제공한 값은 일치하는 항목을 찾을 때까지 스위치 블록 내부의 모든 사례와 비교됩니다.

대소문자 일치가 발견되지 않으면 기본 문이 실행되고 제어는 스위치 블록 밖으로 나갑니다.

대소문자 전환 구문

'C' 프로그램에서 switch-case가 구현되는 방법에 대한 일반적인 구문은 다음과 같습니다.

switch( expression )
{
	case value-1:
			Block-1;
			Break;
	case value-2:
			Block-2;
			Break;
	case value-n:
			Block-n;
			Break;
	default:
			Block-1;
			Break;
}
Statement-x;
  • 표현식은 정수 표현식이거나 문자 표현식일 수 있습니다.
  • 값-1, 2, n은 각 케이스를 개별적으로 식별하는 데 사용되는 케이스 레이블입니다. 케이스 라벨은 프로그램을 실행하는 동안 문제를 일으킬 수 있으므로 동일해서는 안 된다는 점을 기억하세요. '1'과 동일한 라벨을 가진 두 개의 케이스가 있다고 가정합니다. 그런 다음 프로그램을 실행하는 동안 프로그램이 두 번째 사례를 실행하기를 원하더라도 먼저 나타나는 사례가 실행됩니다. 이로 인해 프로그램에 문제가 발생하고 원하는 출력이 제공되지 않습니다.
  • 케이스 레이블은 항상 콜론( : )으로 끝납니다. 이러한 각 사례는 블록과 연관되어 있습니다.
  • 블록은 특정 사례에 대해 그룹화된 여러 명령문일 뿐입니다.
  • 스위치가 실행될 때마다 test-expression의 값은 스위치 내부에 정의된 모든 케이스와 비교됩니다. 테스트 표현식에 값 4가 포함되어 있다고 가정합니다. 이 값은 프로그램에서 레이블 XNUMX가 발견될 때까지 모든 케이스와 비교됩니다. 사례가 발견되자마자 해당 특정 사례와 관련된 명령문 블록이 실행되고 제어가 스위치 밖으로 나갑니다.
  • 각 케이스의 break 키워드는 특정 케이스의 끝을 나타냅니다. 각 케이스에 중단을 넣지 않으면 특정 케이스가 실행되더라도 C의 스위치는 끝에 도달할 때까지 모든 케이스를 계속 실행합니다. 이런 일이 일어나서는 안 됩니다. 그러므로 우리는 항상 각 경우에 break 키워드를 넣어야 합니다. Break는 일단 실행되면 케이스를 종료하고 컨트롤은 스위치에서 빠져 나옵니다.
  • default 케이스는 선택 사항입니다. test-expression의 값이 switch 내부의 케이스와 일치하지 않을 때마다 default가 실행됩니다. 그렇지 않으면 switch에 default를 쓸 필요가 없습니다.
  • 스위치가 실행되면 제어는 명령문-x로 이동하고 프로그램 실행은 계속됩니다.

Switch 명령문 흐름도

다음 다이어그램은 switch case에서 케이스가 선택되는 방식을 보여줍니다.

Switch 명령문 흐름도

스위치 작동 방식

C의 스위치 케이스 예

다음 프로그램은 switch의 사용을 보여줍니다.

#include <stdio.h>
    int main() {
        int num = 8;
        switch (num) {
            case 7:
                printf("Value is 7");
                break;
            case 8:
                printf("Value is 8");
                break;
            case 9:
                printf("Value is 9");
                break;
            default:
                printf("Out of range");
                break;
        }
        return 0;
    }

출력:

Value is 8

C의 스위치 케이스 예

  1. 주어진 프로그램에서 우리는 a를 초기화했습니다. 변수 값이 8인 숫자입니다.
  2. 스위치 구성은 변수 num에 저장된 값을 비교하고 일치하는 케이스와 관련된 명령문 블록을 실행하는 데 사용됩니다.
  3. 이 프로그램에서는 변수 num에 저장된 값이 8이므로 스위치는 Case-Label이 XNUMX인 케이스를 실행합니다. 케이스를 실행한 후 제어는 스위치에서 벗어나 다음과 같은 성공적인 결과로 프로그램이 종료됩니다. 출력 화면에 값을 인쇄합니다.

변수 num의 값을 변경해 보고 출력의 변화를 확인하세요.

예를 들어, 기본값을 사용하는 다음 프로그램을 고려해 보겠습니다.

#include <stdio.h>
int main() {
int language = 10;
  switch (language) {
  case 1:
    printf("C#\n");
    break;
  case 2:
    printf("C\n");
    break;
  case 3:
    printf("C++\n");
    break;
  default:
    printf("Other programming language\n");}}

출력:

Other programming language

C에서 스위치 케이스로 작업할 때 여러 케이스를 고유한 레이블로 그룹화합니다. switch 문의 끝에서 분기하려면 각 경우에 break 문을 도입해야 합니다.

선택적 기본 사례는 다른 일치 항목이 없을 때 실행됩니다.

다음의 switch 문을 고려해 보겠습니다.

#include <stdio.h>
int main() {
int number=5;
switch (number) {
  case 1:
  case 2:
  case 3:
    printf("One, Two, or Three.\n");
    break;
  case 4:
  case 5:
  case 6:
    printf("Four, Five, or Six.\n");
    break;
  default:
    printf("Greater than Six.\n");}}

출력:

Four, Five, or Six.

C의 중첩 스위치

In C, 외부 스위치에 내부 스위치를 내장할 수 있습니다. 또한 내부 스위치와 외부 스위치의 대소문자 상수는 충돌 없이 공통 값을 가질 수 있습니다.

다음 프로그램은 사용자에게 자신의 ID를 입력하도록 요청합니다. ID가 유효하면 비밀번호를 입력하도록 요청하고, 비밀번호가 맞으면 사용자의 이름을 출력하고, 틀리면 "비밀번호가 잘못되었습니다"를 출력합니다. ID가 존재하지 않으면 "ID가 잘못되었습니다"를 출력합니다.

#include <stdio.h>
int main() {
        int ID = 500;
        int password = 000;
        printf("Plese Enter Your ID:\n ");
        scanf("%d", & ID);
        switch (ID) {
            case 500:
                printf("Enter your password:\n ");
                scanf("%d", & password);
                switch (password) {
                    case 000:
                        printf("Welcome Dear Programmer\n");
                        break;
                    default:
                        printf("incorrect password");
                        break;
                }
                break;
            default:
                printf("incorrect ID");
                break;
        }
}

출력:

Plese Enter Your ID:
 500
Enter your password:
 000
Welcome Dear Programmer

C의 중첩 스위치

  1. 주어진 프로그램에서 ID와 password라는 두 변수를 초기화했습니다.
  2. 외부 switch 문은 변수 ID에 입력된 값을 비교하는 데 사용됩니다. ID가 500인 경우와 일치하는 조건과 관련된 문장 블록을 실행합니다.
  3. 블록 문이 일치하는 경우와 함께 실행되면 내부 switch 문을 사용하여 변수 password에 입력된 값을 비교하고 일치하는 경우(password==000인 경우)에 연결된 문을 실행합니다.
  4. 그렇지 않으면, switch case는 default case를 트리거하고 프로그램 개요와 관련된 적절한 텍스트를 출력합니다.

스위치 케이스가 필요한 이유는 무엇입니까?

한 가지 잠재적인 문제가 있습니다. if-else 문 이는 대체 경로의 수가 증가할 때마다 프로그램의 복잡성이 증가한다는 것입니다. 프로그램에서 여러 if-else 구조를 사용하면 프로그램을 읽고 이해하기 어려울 수 있습니다. 때로는 프로그램을 직접 작성한 개발자를 혼란스럽게 할 수도 있습니다.

이 문제에 대한 해결책은 스위치 문입니다.

switch 문의 규칙

C 언어로 switch 문을 작성할 때는 다음 규칙을 따르세요.

  • 표현식은 항상 결과에 따라 실행되어야 합니다.
  • 케이스 레이블은 상수이고 고유해야 합니다.
  • 케이스 라벨은 콜론( : )으로 끝나야 합니다.
  • 각각의 경우에는 break 키워드가 있어야 합니다.
  • 기본 레이블은 하나만 있을 수 있습니다.
  • 여러 개의 스위치 문을 중첩할 수 있습니다.

자주 묻는 질문

AC 스위치는 정수, 문자 및 열거형 값만 허용하며, 부동 소수점이나 문자열은 허용하지 않습니다. 각 레이블은 상수 정수여야 하기 때문입니다.

중단 없이 제어가 계속되면 이후의 모든 사례도 실행됩니다. 이는 의도적인 경우도 있지만, 대개는 우발적인 버그입니다.

아니요, C 언어는 문자열을 기준으로 조건을 만족시킬 수 없습니다. 레이블은 상수 정수여야 합니다. 대신 if-else 문 안에서 strcmp 함수를 사용하여 텍스트를 비교하세요.

표준 C에서는 범위를 금지하지만 GCC는 이식성이 없는 경우를 허용합니다. 1 … 5: 이식 가능한 코드는 피해야 합니다.

아니요. 기본 케이스는 어디에든 위치할 수 있으며, 일치하는 레이블이 없을 때만 실행됩니다. 마지막 위치는 단지 관례일 뿐입니다.

네, 하지만 case 본문을 중괄호로 감싸야 합니다. 그렇지 않으면 레이블 뒤에 선언이 있으면 컴파일 오류가 발생할 수 있습니다.

네. AI 코딩 도우미는 스위치 블록을 작성하고, 각 분기를 추가하며, 의도치 않은 폴스루를 표시합니다. 생성된 로직은 항상 검토하십시오.

GitHub 부조종사 케이스 레이블을 자동 완성하고, break 문을 삽입하며, 긴 if-else 문을 주석에서 switch 문으로 변환합니다.

이 게시물을 요약하면 다음과 같습니다.