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:21] – durdilova | ccpp:vetvenicase [2021/11/22 12:50] (aktuální) – bures | ||
|---|---|---|---|
| Řádek 3: | Řádek 3: | ||
| 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. | 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 | + | ===== Syntaxe příkazu |
| <code c> | <code c> | ||
| - | switch (selektor) | ||
| - | { | ||
| - | case hodnota1 : prikaz1; | ||
| - | case hodnota2 : prikaz2; | ||
| - | ... | ||
| - | case hodnotan : prikazn; | ||
| - | } | ||
| - | |||
| switch (selektor) | switch (selektor) | ||
| { | { | ||
| Řádek 24: | Řádek 16: | ||
| ==== Poznámky ==== | ==== Poznámky ==== | ||
| - | * Středník ukončuje až celý příkaz if, za hlavičku se středník nepíše. | + | * 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) |
| - | * Pokud je v kladné nebo záporné | + | * jednotlivé větve pro hodnoty výrazu jsou definovány pomocí klíčového slova **case**. |
| - | * V případě, že potřebujeme definovat odlišná chování | + | * hodnoty |
| + | * 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čí | ||
| + | * 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 | ||
| ===== Průběh rozhodovacího příkazu ===== | ===== Průběh rozhodovacího příkazu ===== | ||
| - | - **vyhodnocení | + | - **vyhodnocení |
| - | | + | |
| - | - **vykonání | + | - selektor se rovná hodnotě1 |
| - | - podmínka neplatí | + | |
| - | - **vykonání druhé skupiny | + | **pokud je uvedeno break, příkaz končí jinak dojde k vykonávání dalších |
| + | - selektor se nerovná hodnotě1 | ||
| + | | ||
| + | *... | ||
| - | ==== Výpis textu, zda celé číslo x je liché nebo sudé ==== | + | |
| + | ==== Selektor větvení | ||
| <code c> | <code c> | ||
| - | if | + | int znamka = 2; |
| - | printf(" | + | switch |
| - | else | + | { |
| - | printf(" | + | 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(" | ||
| + | | ||
| + | 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 patek: | ||
| + | case utery: | ||
| + | case streda: | ||
| + | case ctvrtek: | ||
| + | case sobota: | ||
| + | case nedele: | ||
| + | } | ||
| </ | </ | ||