Větvení do více větví
Příkaz switch umožňuje větvit program na základě nějakého selektoru. Selektorje proměnná nebo výraz datového typu celé číslo, znak nebo výčet.
Syntaxe příkazu switch
switch (selektor) { case hodnota1 : prikaz1;break; case hodnota2 : prikaz2;break; ... case hodnotan : prikazn;break; default: prikazD;break; }
Poznámky
- selektor větvení je proměnná nebo výraz ordinálního datového typu (v některých jazycí může být typu string)
- jednotlivé větve pro hodnoty výrazu jsou definovány pomocí klíčového slova case.
- hodnoty v jednotlivých větvích jsou stejného datového typu jako je selektor větvení
- jedna hodnota nemůže být ve dvou větvích
- část default je nepovinná a je provedena pouze, pokud selektor větvení nenabývá žádné z hodnot větví case
- tělo příkazu switch začíná a končí složenými závarkami
- příkaz break definitivně ukončí provádění příkazu switch
- příkaz goto umožňuje skok na jiný blok case uvnitř příkazu switch
- pokud chci provést určitý příkaz pro více hodnot, využiju tzv. propadávání (nenapíši break)
Průběh rozhodovacího příkazu
- vyhodnocení selektoru
- * porovnání hodnoty selektoru s hodnotou1
- selektor se rovná hodnotě1
- *vykonání druhé skupiny příkazů za else pokud je uvedeno break, příkaz končí jinak dojde k vykonávání dalších příkazů v dalších větvích
- selektor se nerovná hodnotě1
- * porovnání hodnoty selektoru s hodnotou2
- …
Selektor větvení je celočíselný
int znamka = 2; switch (znamka) //selektor větvení { case 1: printf("Vyborny\n"); break; case 2: printf("Chvalitebny\n"); break; case 3: printf("Dobry\n"); break; case 4: printf("Dostatcny\n"); break; case 5: printf("Nedostatcny\n"); break; default: printf("Chybny vstup!\n"); break; }
Selektor větvení je znak
char rimska = 'D'; int arabsky; switch (rimska) //selektor větvení { case 'I': arabsky = 1; break; case 'V': arabsky = 5; break; case 'X': arabsky = 10; break; case 'L': arabsky = 50; break; case 'C': arabsky = 100; break; case 'D': arabsky = 500; break; case 'M': arabsky = 1000; break; default: printf("Neznama cislice\n"); arabsky = 0; break; } printf("Rimska cislice %c je %i\n", rimska, arabsky);
Selektor větvení je typu výčet
enum tyden { pondeli, utery, streda, ctvrtek, patek, sobota, nedele }; enum tyden dnes = streda; switch (dnes) //selektor větvení { case pondeli: case patek: case utery:printf("13 - 18");break; case streda:printf("12 - 20");break; case ctvrtek:printf("8 - 12");break; case sobota: case nedele:printf("zavreno");break; }