kapcsoló… tok C-ben (C-ben a kapcsolási utasítás) példákkal

⚡ Okos összefoglaló

A C-ben található Switch utasítás egy kifejezést több esettanulmány-címkével hasonlít össze, és lefuttatja a megfelelő blokkot, tisztább alternatívát kínálva a hosszú if-else láncokkal szemben, amikor egy programnak sok fix egész vagy karakterérték közül kell választania.

  • 🔀 Többirányú elágazás: Egy kapcsoló tesztel egy kifejezést, és a megfelelő kisbetűs/esetbeli címkére ugrik.
  • 🏷️ Esetcímkék: Minden eset egyedi konstans egész számot vagy karaktercímkét használ, amely kettősponttal végződik.
  • Kulcsszómegszakítás: A break utasítás leállítja az esetet; enélkül a végrehajtás meghiúsul.
  • 🧩 Alapértelmezett eset: Az opcionális alapértelmezett blokk akkor fut le, ha egyetlen esetcímke sem felel meg a kifejezésnek.
  • 📋 Váltási szabályok: Az esetcímkék állandóak és egyediek maradnak, csak egy alapértelmezett címke engedélyezett.

Switch utasítás C-ben

Mi az a Switch utasítás C-ben?

A C nyelvben a Switch utasítás egy változó értékét teszteli, és több esettel hasonlítja össze. Amint az esetegyezés megtalálható, az adott esethez tartozó utasításblokk végrehajtásra kerül.

A kapcsoló blokkjában minden esetnek más a neve/száma, amelyre azonosítóként hivatkozunk. A felhasználó által megadott értéket a rendszer összehasonlítja a kapcsolóblokkon belüli összes esettel, amíg meg nem találja az egyezést.

Ha NEM található esetegyeztetés, akkor az alapértelmezett utasítás végrehajtásra kerül, és a vezérlés kilép a kapcsolóblokkból.

Kis- és nagybetűk szintaxisának váltása

A switch-case megvalósításának általános szintaxisa egy „C” programban a következő:

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;
  • A kifejezés lehet egész vagy karakteres kifejezés.
  • Az 1, 2, n érték olyan esetcímkék, amelyek az egyes esetek egyedi azonosítására szolgálnak. Ne feledje, hogy a kis- és nagybetűs címkék nem lehetnek azonosak, mivel ez problémákat okozhat a program végrehajtása során. Tegyük fel, hogy van két esetünk, amelyeknek ugyanaz a címkéje, mint az „1”. Ezután a program végrehajtása közben az elsőként megjelenő eset kerül végrehajtásra, bár azt szeretné, hogy a program egy második esetet hajtson végre. Ez problémákat okoz a programban, és nem biztosítja a kívánt kimenetet.
  • A tokcímkék mindig kettősponttal ( : ) végződnek. Ezen esetek mindegyike blokkhoz kapcsolódik.
  • A blokk nem más, mint több utasítás, amelyek egy adott esethez vannak csoportosítva.
  • Valahányszor a kapcsoló végrehajtódik, a tesztkifejezés értékét összehasonlítjuk az összes olyan esettel, amelyet a kapcsolón belül definiáltunk. Tegyük fel, hogy a tesztkifejezés 4-es értéket tartalmaz. Ezt az értéket a program összehasonlítja az összes esettel, amíg a négyes címkét nem találja a program. Amint egy esetet talál, az adott esethez tartozó utasításblokk végrehajtásra kerül, és a vezérlés kilép a kapcsolóból.
  • A break kulcsszó minden esetben egy adott eset végét jelzi. Ha nem teszünk meg minden esetben a szünetet, akkor annak ellenére, hogy az adott eset végrehajtásra kerül, a C-beli kapcsoló az összes esetet végrehajtja a vég eléréséig. Ennek nem szabad megtörténnie; ezért mindig minden esetben meg kell adnunk a break kulcsszót. A Break leállítja az esetet a végrehajtás után, és a vezérlő kiesik a kapcsolóból.
  • Az alapértelmezett eset nem kötelező. Ha a tesztkifejezés értéke nem egyezik a kapcsolón belüli esetek egyikével sem, akkor az alapértelmezett érték kerül végrehajtásra. Ellenkező esetben nem szükséges alapértelmezettet írni a kapcsolóba.
  • A váltás végrehajtása után a vezérlés az-x utasításra megy, és a program végrehajtása folytatódik.

Kapcsolási nyilatkozat folyamatábra

Az alábbi diagram bemutatja, hogyan kell kiválasztani a tokot a kapcsolóházban:

Kapcsolási nyilatkozat folyamatábra

Hogyan működik a kapcsoló

Példa a kapcsoló esetére a C-ben

Az alábbi program szemlélteti a kapcsoló használatát:

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

output:

Value is 8

Példa a kapcsoló esetére a C-ben

  1. Az adott programban inicializáltunk egy változó 8-as értékű szám.
  2. A kapcsoló konstrukciót használjuk a num változóban tárolt érték összehasonlítására és az illesztett esethez tartozó utasításblokk végrehajtására.
  3. Ebben a programban, mivel a num változóban tárolt érték nyolc, egy kapcsoló végrehajtja azt az esetet, amelynek esetcímkéje 8. Az eset végrehajtása után a vezérlés kiesik a kapcsolóból, és a sikeres eredménnyel a program leáll. az érték kinyomtatása a kimeneti képernyőn.

Próbálja meg megváltoztatni a num változó értékét, és vegye észre a változást a kimenetben.

Például a következő alapértelmezett programot tekintjük:

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

output:

Other programming language

Ha C-ben a kapcsolóbetétekkel dolgozik, több esetet egyedi címkékkel csoportosít. Minden esetben be kell vezetnie egy break utasítást, hogy a switch utasítás végén elágasszon.

Az opcionális alapértelmezett eset akkor fut, ha nincs más egyezés.

A következő váltási utasítást vesszük figyelembe:

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

output:

Four, Five, or Six.

Beágyazott kapcsoló C-ben

In C, akkor lehet egy belső kapcsolót egy külső kapcsolóba ágyazni. Ezenkívül a belső és a külső kapcsoló esetállandóinak közös értékei lehetnek, és nem ütköznek egymással.

A következő programot tekintjük, amely arra kéri a felhasználót, hogy adja meg a saját azonosítóját. Ha az azonosító érvényes, akkor a jelszó megadását kéri; ha a jelszó helyes, a program kiírja a felhasználó nevét, ellenkező esetben a program „Helytelen jelszó” üzenetet ír ki; ha az azonosító nem létezik, akkor „Helytelen azonosító” üzenetet ír ki.

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

output:

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

Beágyazott kapcsoló C-ben

  1. A megadott programban két változót inicializáltunk: az azonosítót és a jelszót.
  2. Egy külső kapcsolószerkezetet használunk az ID változóban megadott érték összehasonlítására. Végrehajtja az egyező esethez (amikor ID==500) tartozó utasításblokkot.
  3. Ha a blokk utasítás az egyező esettel végrehajtódik, egy belső kapcsoló segítségével hasonlítja össze a password változóba beírt értékeket, és végrehajtja az egyező esethez (amikor password==000) kapcsolódó utasításokat.
  4. Ellenkező esetben a kapcsoló kis- és nagybetűje az alapértelmezett esetet váltja ki, és kiírja a megfelelő szöveget a program vázlatára vonatkozóan.

Miért van szükségünk Switch tokra?

Egy lehetséges probléma van a ha-más kijelentés ami a program összetettsége növekszik, amikor az alternatív útvonalak száma növekszik. Ha több if-else konstrukciót használ a programban, a program nehezen olvasható és érthetővé válhat. Néha még a fejlesztőt is megzavarhatja, aki maga írta a programot.

A probléma megoldása a switch utasítás.

A switch nyilatkozat szabályai

C-ben kapcsoló írásakor kövesse ezeket a szabályokat:

  • A kifejezésnek mindig eredményre kell futnia.
  • Az esetcímkéknek állandónak és egyedinek kell lenniük.
  • A tokok címkéinek kettősponttal ( : ) kell végződniük.
  • A break kulcsszónak minden esetben jelen kell lennie.
  • Csak egy alapértelmezett címke lehet.
  • Több switch utasítást is egymásba ágyazhatunk.

GYIK

Az AC switch csak int, char és enum értékeket fogad el – soha nem lebegőpontos vagy karakterláncos értékeket, mivel minden címkének konstans egész számnak kell lennie.

Szünet nélkül a vezérlés kiesik, és minden későbbi esetben is lefut – néha szándékosan, de általában véletlen hiba miatt.

Nem. A C nem tud karakterláncokat váltani; a címkéknek konstans egész számoknak kell lenniük. Hasonlítsa össze a szöveget az if-else függvényen belüli strcmp-pel.

A C szabvány tiltja a tartományokat, bár a GCC megenged egy nem hordozható 1 … 5: kiterjesztést, amelyet a hordozható kódnak kerülnie kell.

Nem. Az alapértelmezett eset bárhol lehet; csak akkor fut le, ha nincs egyező címke. Az utolsó elhelyezés pusztán konvenció.

Igen, de a case törzsét kapcsos zárójelek közé kell tenni; különben a címke utáni deklaráció fordítási hibákat okozhat.

Igen. A mesterséges intelligencia által vezérelt kódolási asszisztensek megrajzolják a kapcsolóblokkokat, hozzáadják az egyes megszakításokat, és jelzik a véletlen áteséseket. Mindig ellenőrizd a létrehozott logikát.

GitHub másodpilóta automatikusan kiegészíti az esetcímkéket, beszúrja a break utasításokat, és a hosszú if-else láncokat megjegyzésből származó kapcsolóvá alakítja.

Foglald össze ezt a bejegyzést a következőképpen: