Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
ccpp:vetvenicase [2019/10/10 15:14] – durdilova | ccpp:vetvenicase [2021/11/22 12:50] (aktuální) – bures | ||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
===== Větvení do více větví ===== | ===== 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 ===== | ||
+ | <code c> | ||
+ | switch (selektor) | ||
+ | { | ||
+ | case hodnota1 : prikaz1; | ||
+ | case hodnota2 : prikaz2; | ||
+ | ... | ||
+ | case hodnotan : prikazn; | ||
+ | default: prikazD; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== 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ý ==== | ||
+ | <code c> | ||
+ | int znamka = 2; | ||
+ | switch (znamka) //selektor větvení | ||
+ | { | ||
+ | case 1: | ||
+ | printf(" | ||
+ | break; | ||
+ | case 2: | ||
+ | printf(" | ||
+ | break; | ||
+ | case 3: | ||
+ | printf(" | ||
+ | break; | ||
+ | case 4: | ||
+ | printf(" | ||
+ | break; | ||
+ | case 5: | ||
+ | printf(" | ||
+ | break; | ||
+ | default: | ||
+ | printf(" | ||
+ | break; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Selektor větvení je znak ==== | ||
+ | <code c> | ||
+ | char rimska = ' | ||
+ | int arabsky; | ||
+ | switch (rimska) //selektor větvení | ||
+ | { | ||
+ | case ' | ||
+ | arabsky = 1; | ||
+ | break; | ||
+ | case ' | ||
+ | arabsky = 5; | ||
+ | break; | ||
+ | case ' | ||
+ | arabsky = 10; | ||
+ | break; | ||
+ | case ' | ||
+ | arabsky = 50; | ||
+ | break; | ||
+ | case ' | ||
+ | arabsky = 100; | ||
+ | break; | ||
+ | case ' | ||
+ | arabsky = 500; | ||
+ | break; | ||
+ | case ' | ||
+ | arabsky = 1000; | ||
+ | break; | ||
+ | default: | ||
+ | printf(" | ||
+ | arabsky = 0; | ||
+ | break; | ||
+ | } | ||
+ | printf(" | ||
+ | </ | ||
+ | |||
+ | ==== Selektor větvení je typu výčet ==== | ||
+ | <code c> | ||
+ | enum tyden { pondeli, utery, streda, ctvrtek, patek, sobota, nedele }; | ||
+ | enum tyden dnes = streda; | ||
+ | switch (dnes) //selektor větvení | ||
+ | { | ||
+ | case pondeli: | ||
+ | case patek: | ||
+ | case utery: | ||
+ | case streda: | ||
+ | case ctvrtek: | ||
+ | case sobota: | ||
+ | case nedele: | ||
+ | } | ||
+ | </ |