Příkaz switch

Někdy program vybírá, co udělá, podle přesné hodnoty jedné proměnné: tlačítko 1 na automatu na nápoje udělá kávu, tlačítko 2 čaj a tak dále. Dalo by se to napsat pomocí else if, ale jazyk C na to má přehlednější příkaz switch (anglicky „přepnout“):

int den = 3;

switch (den) {
    case 1:
        printf("Pondělí\n");
        break;
    case 2:
        printf("Úterý\n");
        break;
    case 3:
        printf("Středa\n");
        break;
    default:
        printf("Jiný den\n");
        break;
}

Tento kód vypíše:

Středa

switch vezme hodnotu v závorkách, tady hodnotu proměnné den, a skočí na case („případ“) se stejnou hodnotou. Za case následuje hodnota a dvojtečka a pod nimi příkazy, které se mají provést. break („přerušit“) příkaz switch ukončí: program pokračuje za jeho uzavírací závorkou. default („výchozí“) zachytí všechny hodnoty, které nemají vlastní case, stejně jako else na konci řady else if. Větev default je nepovinná a obvykle se píše jako poslední. V poslední větvi break potřeba není, protože tam switch končí tak jako tak, ale je dobrým zvykem psát ho do každé větve.

Na break si dejte pozor. Bez něj se program u dalšího case nezastaví: propadne dál a provede i příkazy následujících případů, dokud nenarazí na break nebo na konec příkazu switch:

int den = 2;

switch (den) {
    case 1:
        printf("Pondělí\n");
    case 2:
        printf("Úterý\n");
    case 3:
        printf("Středa\n");
    default:
        printf("Jiný den\n");
}

Tento kód vypíše:

Úterý
Středa
Jiný den

Program skočil na case 2 a pak provedl všechno pod ním. Překladač nic neohlásí, takže když switch vypisuje víc, než má, hledejte chybějící break.

Někdy je propadnutí přesně to, co chcete: když má několik hodnot stejné příkazy. Jejich řádky s case pak napíšete pod sebe:

int den = 6;

switch (den) {
    case 6:
    case 7:
        printf("Víkend\n");
        break;
    default:
        printf("Pracovní den\n");
        break;
}

Tento kód vypíše:

Víkend

switch funguje jen s celými čísly a se znaky, například case 3: nebo case 'A':. Neumí zkontrolovat rozsah jako teplota > 25 a nefunguje s desetinnými čísly: na switch (cena) s proměnnou typu double překladač ohlásí chybu error: statement requires expression of integer type ('double' invalid). V takových případech použijte if a else if.

Pokyny

Automat na nápoje má chybu: po stisku tlačítka 2 dá čaj i horkou čokoládu. Spusťte program a pak doplňte chybějící break, aby vypsal jen Čaj a Děkujeme!.

Na konec příkazu switch, pod poslední break, přidejte větev default, která vypíše Neznámé tlačítko.

Změňte tlacitko na 7 a spusťte program. Hodnotu 7 nemá žádný case, a tak program vypíše Neznámé tlačítko a Děkujeme!.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

11/12