switch…case w C (instrukcja Switch w C) z przykładami

⚡ Inteligentne podsumowanie

Instrukcja Switch w języku C porównuje jedno wyrażenie z wieloma etykietami case i uruchamia pasujący blok, oferując czystszą alternatywę dla długich łańcuchów if-else, gdy program musi dokonać wyboru spośród wielu stałych wartości całkowitych lub znakowych.

  • 🔀 Rozgałęzienie wielokierunkowe: Przełącznik testuje jedno wyrażenie i przechodzi do pasującej etykiety przypadku.
  • 🏷️ Etykiety na etui: W każdym przypadku używana jest unikalna stała liczba całkowita lub etykieta znaku zakończona dwukropkiem.
  • Słowo kluczowe Break: Polecenie break kończy działanie instrukcji; bez niego wykonanie instrukcji zostaje przerwane.
  • 🧩 Przypadek domyślny: Opcjonalny blok domyślny jest uruchamiany, gdy żadna etykieta przypadku nie pasuje do wyrażenia.
  • 📋 Zasady przełączania: Etykiety przypadków pozostają stałe i niepowtarzalne, przy czym dozwolona jest tylko jedna domyślna etykieta.

Instrukcja Switch w języku C

Co to jest instrukcja Switch w C?

Instrukcja switch w języku C testuje wartość zmiennej i porównuje ją z wieloma przypadkami. Po znalezieniu pasującego przypadku wykonywany jest blok instrukcji powiązany z tym konkretnym przypadkiem.

Każdy przypadek w bloku przełącznika ma inną nazwę/numer, który nazywany jest identyfikatorem. Wartość podana przez użytkownika jest porównywana ze wszystkimi przypadkami w bloku przełączników, aż do znalezienia dopasowania.

Jeśli NIE zostanie znalezione dopasowanie wielkości liter, wykonywana jest instrukcja domyślna i sterowanie wychodzi z bloku przełączania.

Zmień składnię przypadku

Ogólna składnia implementacji wielkości liter w programie „C” jest następująca:

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;
  • Wyrażenie może być wyrażeniem całkowitym lub wyrażeniem znakowym.
  • Wartości-1, 2, n to etykiety przypadków, które służą do indywidualnej identyfikacji każdego przypadku. Pamiętaj, że etykiety przypadków nie powinny być takie same, gdyż może to spowodować problem podczas wykonywania programu. Załóżmy, że mamy dwa przypadki z tą samą etykietą co „1”. Następnie podczas wykonywania programu zostanie wykonany przypadek, który pojawi się jako pierwszy, nawet jeśli chcesz, aby program wykonał drugi przypadek. Stwarza to problemy w programie i nie zapewnia pożądanych wyników.
  • Etykiety przypadków zawsze kończą się dwukropkiem (:). Każdy z tych przypadków jest powiązany z blokiem.
  • Blok to nic innego jak wiele instrukcji pogrupowanych dla konkretnego przypadku.
  • Za każdym razem, gdy wykonywany jest przełącznik, wartość wyrażenia testowego jest porównywana ze wszystkimi przypadkami, które zdefiniowaliśmy wewnątrz przełącznika. Załóżmy, że wyrażenie testowe zawiera wartość 4. Wartość ta jest porównywana ze wszystkimi przypadkami, aż do przypadku, którego etykieta XNUMX zostanie znaleziona w programie. Gdy tylko przypadek zostanie znaleziony, wykonywany jest blok instrukcji skojarzony z tym konkretnym przypadkiem, a sterowanie zostaje wyłączone.
  • Słowo kluczowe break w każdym przypadku wskazuje koniec konkretnego przypadku. Jeśli nie wstawimy breaka w każdym przypadku, to nawet jeśli konkretny przypadek zostanie wykonany, przełącznik w C będzie kontynuował wykonywanie wszystkich przypadków, aż do osiągnięcia końca. To nie powinno się zdarzyć; dlatego zawsze musimy w każdym przypadku umieścić słowo kluczowe break. Break zakończy sprawę po jej wykonaniu, a sterowanie wypadnie z przełącznika.
  • Przypadek domyślny jest opcjonalny. Za każdym razem, gdy wartość test-expression nie jest zgodna z żadnym przypadkiem wewnątrz przełącznika, zostanie wykonany domyślny. W przeciwnym wypadku nie trzeba pisać default w przełączniku.
  • Po wykonaniu przełącznika sterowanie przejdzie do instrukcji-x i wykonywanie programu będzie kontynuowane.

Schemat blokowy instrukcji przełącznika

Poniższy diagram ilustruje sposób wybierania przypadku w przypadku przełącznika:

Schemat blokowy instrukcji przełącznika

Jak działa przełącznik

Przykład przypadku przełącznika w C

Poniższy program ilustruje użycie przełącznika:

#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;
    }

Wyjście:

Value is 8

Przykład przypadku przełącznika w C

  1. W podanym programie zainicjowaliśmy zmienna liczba o wartości 8.
  2. Konstrukcja przełącznika służy do porównywania wartości przechowywanej w zmiennej num i wykonywania bloku instrukcji powiązanego z dopasowanym przypadkiem.
  3. W tym programie, ponieważ wartość przechowywana w zmiennej num wynosi osiem, przełącznik wykona przypadek, którego etykieta wynosi 8. Po wykonaniu przypadku sterowanie wypadnie ze przełącznika, a program zostanie zakończony pomyślnym wynikiem przez wydrukowanie wartości na ekranie wyjściowym.

Spróbuj zmienić wartość zmiennej num i zwróć uwagę na zmianę na wyjściu.

Rozważmy na przykład następujący program, który domyślnie:

#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");}}

Wyjście:

Other programming language

Pracując z obudową przełączników w C, grupujesz wiele przypadków z unikalnymi etykietami. W każdym przypadku należy wprowadzić instrukcję break, aby rozgałęzić się na końcu instrukcji switch.

Opcjonalny przypadek domyślny jest uruchamiany, gdy nie zostaną dokonane żadne inne dopasowania.

Rozważmy następującą instrukcję 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");}}

Wyjście:

Four, Five, or Six.

Zagnieżdżony przełącznik w C

In Cmożemy mieć przełącznik wewnętrzny osadzony w przełączniku zewnętrznym. Ponadto stałe przypadku przełącznika wewnętrznego i zewnętrznego mogą mieć wspólne wartości i nie powodować żadnych konfliktów.

Rozważmy poniższy program, który prosi użytkownika o podanie własnego identyfikatora. Jeśli identyfikator jest prawidłowy, program poprosi o podanie hasła; jeśli hasło jest poprawne, program wyświetli nazwę użytkownika; w przeciwnym razie wyświetli komunikat „Nieprawidłowe hasło”; a jeśli identyfikator nie istnieje, program wyświetli komunikat „Nieprawidłowe identyfikator”.

#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;
        }
}

Wyjście:

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

Zagnieżdżony przełącznik w C

  1. W podanym programie zainicjowaliśmy dwie zmienne: ID i hasło.
  2. Konstrukcja przełącznika zewnętrznego służy do porównywania wartości wprowadzonej w zmiennej ID. Wykonuje ona blok instrukcji powiązany z dopasowanym przypadkiem (gdy ID==500).
  3. Jeżeli polecenie blokowe zostanie wykonane z uwzględnieniem wielkości liter, wówczas stosowany jest wewnętrzny przełącznik w celu porównania wartości wprowadzonych w zmiennej password i wykonania poleceń powiązanych z uwzględnieniem wielkości liter (gdy password==000).
  4. W przeciwnym wypadku przełącznik uruchomi przypadek domyślny i wydrukuje odpowiedni tekst dotyczący zarysu programu.

Dlaczego potrzebujemy obudowy Switch?

Jest jeden potencjalny problem z plikiem instrukcja if-else co oznacza, że ​​złożoność programu wzrasta, gdy wzrasta liczba alternatywnych ścieżek. Jeśli używasz wielu konstrukcji if-else w programie, program może stać się trudny do odczytania i zrozumienia. Czasami może to nawet zdezorientować programistę, który sam napisał program.

Rozwiązaniem tego problemu jest instrukcja switch.

Reguły instrukcji switch

Pisząc przełącznik w języku C, należy przestrzegać następujących zasad:

  • Wyrażenie musi zawsze zostać wykonane w wyniku.
  • Etykiety przypadków muszą być stałe i unikalne.
  • Etykiety przypadków muszą kończyć się dwukropkiem ( : ).
  • W każdym przypadku musi występować słowo kluczowe break.
  • Może istnieć tylko jedna etykieta domyślna.
  • Możemy zagnieżdżać wiele instrukcji switch.

FAQ

Przełącznik AC akceptuje tylko wartości int, char i enum — nigdy floaty ani stringi, ponieważ każda etykieta musi być stałą liczbą całkowitą.

Jeśli nie uda się tego przerwać, kontrola przestaje działać i powtarza się każdy kolejny przypadek — czasami celowo, ale zwykle w wyniku przypadkowego błędu.

Nie. Język C nie obsługuje stringów; etykiety muszą być stałymi liczbami całkowitymi. Zamiast tego porównaj tekst za pomocą strcmp wewnątrz if-else.

Standard C zabrania stosowania zakresów, natomiast GCC dopuszcza nieprzenośny przypadek 1 … 5: rozszerzenie, którego przenośny kod powinien unikać.

Nie. Przypadek domyślny może znajdować się w dowolnym miejscu; działa tylko wtedy, gdy żadna etykieta nie pasuje. Ostatnie umiejscowienie jest jedynie konwencją.

Tak, ale należy umieścić treść sprawy w nawiasach klamrowych; w przeciwnym razie deklaracja po etykiecie może wywołać błędy kompilatora.

Tak. Asystenci kodowania AI projektują bloki przełączania, dodają każdą przerwę i sygnalizują przypadkowe przekroczenia. Zawsze sprawdzaj wygenerowaną logikę.

Drugi pilot GitHub automatycznie uzupełnia etykiety przypadków, wstawia instrukcje break i konwertuje długie łańcuchy if-else na instrukcje switch z komentarza.

Podsumuj ten post następująco: