Vezérlőpult
C2. A switch · Vezérlési szerkezetek

C blokk · Vezérlési szerkezetek · 2. tananyag

A switch és a switch-kifejezés

A C1-es else if lánc mindent tud — de amikor egy változót sok konkrét értékkel hasonlítgatsz (menüpont, billentyű, parancsszó), a lánc zajos lesz. Erre való a switch utasítás és kifejezés. A fejezet végén megírjuk az első igazi konzolos menüt.

2 tanóracase · break · defaultswitch-kifejezés (=>)

Tanulási célok

1Mikor switch, mikor if?

Ökölszabály:

HelyzetEszköz
egy változó konkrét, felsorolható értékei (menüpont, billentyű, parancsszó)switch
tartományok, összetett feltételek (&&, ||), több változóif / else if
igen–nem kérdés (bool)if

Ugyanaz a logika kétféleképpen:

Else if lánccal (C1)
if (menupont == 1)
{
    Console.WriteLine("Új játék");
}
else if (menupont == 2)
{
    Console.WriteLine("Betöltés");
}
else
{
    Console.WriteLine("Nincs ilyen");
}
Switch-csel (C2)
switch (menupont)
{
    case 1:
        Console.WriteLine("Új játék");
        break;
    case 2:
        Console.WriteLine("Betöltés");
        break;
    default:
        Console.WriteLine("Nincs ilyen");
        break;
}

A switch ránézésre közli: egyetlen érték esetei következnek — a szem azonnal az eseteket látja, nem feltételeket olvas.

if vagy switch?

Melyik eszközt választanád az adott helyzetre? Az ökölszabály segít.

1 / 8Pontszám: 0
…

2A switch utasítás

Console.Write("Hányadik menüpont? ");
int menupont = int.Parse(Console.ReadLine());

switch (menupont)
{
    case 1:
        Console.WriteLine("Új játék indul!");
        break;
    case 2:
        Console.WriteLine("Játék betöltése…");
        break;
    case 3:
        Console.WriteLine("Kilépés.");
        break;
    default:
        Konzol.Hiba("Nincs ilyen menüpont.");
        break;
}

Több címke egy ágon — ha több érték ugyanazt jelenti:

switch (honap)
{
    case 12:
    case 1:
    case 2:
        Console.WriteLine("tél");
        break;
    case 3:
    case 4:
    case 5:
        Console.WriteLine("tavasz");
        break;
    // … nyár, ősz …
}
ℹ️ EZ NEM ÁTCSORGÁS

Az üres case-címkék halmozása szabályos: „a 12, az 1 és a 2 is erre az ágra tartozik”. Csak a kóddal rendelkező ág végéről nem hiányozhat a break.

3A switch-kifejezés

A switch utasítás programblokkot futtat az ágakban. Gyakran viszont csak értéket akarunk előállítani — erre való a switch-kifejezés, a => nyíllal:

string evszak = honap switch
{
    12 or 1 or 2  => "tél",
    3 or 4 or 5   => "tavasz",
    6 or 7 or 8   => "nyár",
    9 or 10 or 11 => "ősz",
    _ => "nincs ilyen hónap"
};

Console.WriteLine($"A(z) {honap}. hónap: {evszak}.");

Mikor melyik? Ha az ágakban több utasítás kell (kiírás + számolás + szín…), maradj az utasításnál; ha csak egy értéket választasz, a kifejezés rövidebb és szebb.

ℹ️ KITEKINTŐ: TARTOMÁNY A SWITCH-KIFEJEZÉSBEN

A modern C# hasonlítást is enged az ágakban: pontszam switch { >= 85 => "Jeles", >= 70 => "Jó", >= 55 => "Közepes", _ => "Nem sikerült" } — a sorrend itt is felülről lefelé számít, mint a C1-es else if láncban. Használhatod, de az alapeset a konkrét értékek vizsgálata.

5Gyakori hibák

TünetMi történt?Mit tegyél?
CS0163: Control cannot fall through from one case label to anotherlemaradt a break az ág végérőlminden kódos ág végére break;
CS0152: két case ugyanarra az értékreduplikált címketöröld vagy vond össze a címkéket
rossz bevitelre semmi sem történiknincs default ágmenüben mindig írd ki a default ágat
case eletkor >= 18: nem fordul lea klasszikus case csak konkrét értéket fogadtartományhoz if/else if — vagy switch-kifejezés hasonlítással
a KeyChar-os switch egyik ága sem talál1-et írtál '1' helyett — a KeyChar charaposztrófos címke: case '1':
hibasor a switch-kifejezés lezárásánála kifejezés egy értékadás része — pontosvessző jár a végére}; a lezárás
CS8509 figyelmeztetés a switch-kifejezésrenincs minden esetet lefedő ágtegyél a végére _ => ágat

6Gyakorlat — az első igazi menürendszer

  1. Új projekt: Console App, név: KonzolMenu, .NET 10 — és másold be a Konzol.cs-t (B8).
  2. Rajzolj keretezett főmenüt (Konzol.Cim + box-drawing), legalább négy menüponttal: köszöntés, egy B9-es számolós feladatod beépítve, névjegy, kilépés.
  3. A választást ReadKey-jel olvasd be, és switch utasítással ágazz el; ismeretlen billentyűre Konzol.Hiba.
  4. A névjegy menüpontban használj switch-kifejezést is: kérd be a kedvenc évszak sorszámát (1–4), és adj hozzá illő üzenetet.
  5. Tesztelj minden ágat (a defaultot is!), majd commit: Konzolos fomenu switch-csel.
✅ ELLENŐRZŐ PONT

Minden menüpont működik, a kilépés kis- és nagybetűvel is; a rossz billentyű piros hibát ad, és a program nem áll le.

7Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

C2.1⭐

Évszakok: kérd be a hónap sorszámát, és írasd ki az évszakot — több címkével (vagy or-ral), a rossz sorszámra hibaüzenettel.

C2.2⭐

Szöveges bizonyítvány: kérd be az osztályzatot (1–5), és írasd ki a szöveges megfelelőjét (elégtelen … jeles) switch-kifejezéssel.

C2.3⭐⭐

Nyitvatartás: kérd be a nap nevét (kisbetűvel), és írasd ki a bolt nyitvatartását — hétköznap 8–18, szombaton 8–13, vasárnap zárva. String-case-ek és több címke.

C2.4⭐⭐

Fordító-automata: kérj be egy parancsszót (fel, le, balra, jobbra), és írasd ki, mit lép a játékos figurája — ismeretlen parancsra „Ezt nem értem.” (Igen, ez a kalandjáték előszobája.)

C2.5⭐⭐⭐

Zsebszámológép: kérj be két számot és egy műveleti jelet (+, -, *, /), és switch-csel számold ki az eredményt. A nullával osztást if-fel fogd meg ELŐBB, és pirossal jelezd.

8Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

9Fogalomtár

FogalomJelentés
switch utasításegy érték konkrét eseteire ágazik el (case, break, default)
caseegy ág címkéje: konkrét érték, amellyel a vizsgált kifejezést veti össze
breakaz ág lezárása — C#-ban kötelező, nincs néma átcsorgás
defaulta „minden más” ág — az else if lánc else-ének párja
több címkehalmozott case-ek ugyanarra az ágra (case 'k': case 'K':)
switch-kifejezésértéket adó switch: valtozo switch { ertek => eredmeny, _ => egyeb }
_ (discard)a switch-kifejezés „minden más” ága
or mintatöbb érték egy ágban a switch-kifejezésben (12 or 1 or 2)

10Összegzés

  1. Konkrét, felsorolható értékekre switch, tartományra és összetett feltételre if — a kód olvashatósága dönt.
  2. A switch utasításban minden kódos ág végén break — a C# nem enged átcsorgást; az üres címkék halmozása viszont szabályos.
  3. A default a biztonsági háló — menüben soha ne hagyd el.
  4. A switch-kifejezés értéket ad: => ágak, or a több értékre, _ a „minden másra”.
  5. ReadKey + switch = konzolos menü — a Mastermind és a kalandjáték alapköve; a visszatérő menühöz már ismétlés kell, hamarosan az is meglesz.