www.amapro.cz & David Bazala [Programování]

Otevře webové stránky AmaPro


Otevře hlavní stránku společnosti AmaPro
Internetové stránky určené pro studenty středních a vysokých odborných škol.


amapro.cz/odkazy Projekt eliminuje vyhledávání klíčových slov na komerčních stránkách a v e-schopech.



Nový projekt AmaPro

switch

 

Příkaz switch je standardní příkaz Céčka, který pracuje ve funkci přepínače. Díky své funkci lze výhodně použít pro mnohonásobné větvení. Do příkazu switch vstupuje výraz, který musí vracet celočíselnou hodnotu (int, char). Příkaz switch vytváří tělo přepínače, které musí být ve složených závorkách. Jednotlivé větve potom začínají příkazem case a hodnotou (int, char), jenž jsou ukončeny dvojtečkou. Příkaz case vybírá vstupní hodnotu příkazu switch. Při shodě začne provádět příkazy za case. Příkazy jsou prováděny postupně, než se narazí na první break. Break oznamuje o konci větve a předává řízení příkazu, který leží bezprostředně za příkazem switch.

 

switch (výraz)

{

case hodnota1:příkaz1;příkaz2,….příkazN;break;

case hodnota2:příkaz1;příkaz2,….příkazN;break;

case hodnota3:příkaz1;příkaz2,….příkazN;break;

default:příkaz1;příkaz2,….příkazN;break;

}

 

 

Příkaz switch podporuje speciální větev, kterou lze využít, jestliže se vstupní hodnota neshoduje s žádným uvedeným case. Příkaz default je bez hodnoty, následuje dvojtečka. Za dvojtečkou jsou příkazy, které budou vykonány jestliže se hodnota neshodla s žádným case.

 

Doplňující informace a doporučení:

 

-          příkaz default nemusí být posledním příkazem, ale z konvence se píše poslední

-          za posledním case nebo default v těle switch se nemusí psát break, ale z konvence se píše

-          je-li ve větvi case více příkazů za sebou, nemusí se psát do složených závorek

-          v přepínači se nesmí používat dvě case se stejnou hodnotou

-          příkaz continue nemá s příkazem switch nic společného

 

PŘÍKLAD: switch_1

char x=getchar();                                                //vstup x jako char z klávesnice

switch (x)                                                             //hlava přepínače pro řídící x

   {                                                                         //začátek těla přepínače

   case 'a': cout<<"Stisknuta a";break;            //větev pro hodnotu x rovnu 'a'

   case 'b': cout<<"Stisknuta b";break;            //větev pro hodnotu x rovnu 'b'

   case 'c': cout<<"Stisknuta c";break;            //větev pro hodnotu x rovnu 'c'

   default : cout<<"Jina klavesa";break;          //větev pro jakoukoliv jinou hodnotu x

   }                                                                         //konec těla přepínače

while(getchar()!='e');                                          //čekání na stisk 'e'

return 0;                                                //opuštění konzolové aplikace

 

Program deklaruje proměnnou x jako char a přímo ho modifikuje volání funkce getchar(), které zapíše na alokované místo v paměti pro x (1Byte) hodnotu prvního znaku v klávesnicovém buferu. Příkaz switch má svůj vstupní parametr jako hodnotu x, což je hodnota uložená na adrese v paměti. Jedná se o hodnotu int, se kterou pracuje switch. Vstoupí-li klávesa „a“ je to 97 jako int, „b“ =98 a tak dále. V těle switch jsou definovány tři větve case, které mají své hodnoty ‘a‘, ‘b‘, ‘c‘, což pro case představuje 97, 98, 99 jako int. Vstupní hodnota x je porovnána s hodnotami definovanými u jednotlivých case. Při shodě, což je pro nás ‘a‘=‘a‘, pro počítač 97=97, je proveden příkaz cout a následně je větev ukončena příkazem break. Ten způsobí přímí odskok na další příkaz za switch, což je getchar. Nenajde-li vstupní hodnota switch shodu case, provede větev default.

POZNÁMKA: while(getchar()!='e') jsme museli použít místo getchar() (čekání na entr), neboť první příkaz char x=getchar() je ukončen entrem a to by způsobilo i průchod při čekání na entr. Díky tomu, by jsme neviděli výsledky na obrazovce.

 

 

Problematické a specifické konstrukce switch:

 

switch (výraz)

{

case hodnota1:příkaz1;příkaz2,….příkazN;break;

case hodnota2:příkaz1;příkaz2,….příkazN;

case hodnota3:příkaz1;příkaz2,….příkazN;break;

default:příkaz1;příkaz2,….příkazN;break;

}

 

Pokud zapomenete v těle příkazu switch ukončit příkaz case pomocí příkazu break, budou prováděny všechny příkazy až po první příkaz break nebo ukončovací složenou závorku těla switch. Může se stát, že se provedou i příkazy následujících case.

 

PŘÍKLAD: switch_2

char x=getchar();                                                //vstup x jako char z klávesnice

switch(x)                                                              //hlava přepínače pro řídící x

  {                                                                          //začátek těla přepínače

  case 'a':cout<<"větev a";break;                     //větev pro hodnotu x rovnu 'a'

  case 'b':cout<<"větev b";                               //větev pro 'b',POZOR: chybí break

  case 'c':cout<<"větev c";break;                     //větev pro hodnotu x rovnu 'c'

  default :cout<<"neurčeno";break;                //větev pro jakoukoliv jinou hodnotu x

  }                                                                          //konec těla přepínače

while(getchar()!='e');                                          //čekání na stisk 'e'

return 0;                                                               //opuštění konzolové aplikace

 

Program deklaruje proměnnou x jako char a přímo ho modifikuje volání funkce getchar(), které zapíše na alokované místo v paměti pro x (1Byte) hodnotu prvního znaku v klávesnicovém buferu. Příkaz switch má svůj vstupní parametr jako hodnotu x, což je hodnota uložená na adrese v paměti. Jedná se o hodnotu int, se kterou pracuje switch. Vstoupí-li klávesa „a“ je to 97 jako int, „b“ =98 a tak dále. V těle switch jsou definovány tři větve case, které mají své hodnoty ‘a‘, ‘b‘, ‘c‘, což pro case představuje 97, 98, 99 jako int. Vstupní hodnota x je porovnána s hodnotami definovanými u jednotlivých case. Při shodě, což je pro nás ‘b‘=‘b‘, pro počítač 98=98, je proveden příkaz cout a následně není větev ukončena příkazem break. To ovšem způsobí přechod na větev ‘c‘ a provede se ještě cout<<"větev c". Za tímto příkazem je první braek, který se vyskytnul a tak ukončí vykonávání těla switch.

 

 

 

switch (výraz)

{

case hodnota1:příkaz1;příkaz2,….příkazN;break;

default:příkaz1;příkaz2,….příkazN;break;

case hodnota2:příkaz1;příkaz2,….příkazN;

case hodnota3:příkaz1;příkaz2,….příkazN;

}

 

Konstrukce těla switch umožňuje libovolné uspořádání default větve a case. Větev default může být i na začátku, ale musí být vždy ukončené příkazem break. Příkaz break nemusí být uveden u poslední větve. Zde je platný již význam ukončovací závorky těla switch. Z konvence se příkaz break raději nevynechává.

 

PŘÍKLAD: switch_3

char x=getchar();                                                //vstup x jako char z klávesnice

switch (x)                                                             //hlava přepínače pro řídící x

   {                                                          //začátek těla přepínače

   case 'a': cout<<"Stisknuta a";break;            //větev pro hodnotu x rovnu 'a'

   default : cout<<"Jina klavesa";break;          //větev default, nemusí být na konci

   case 'b': cout<<"Stisknuta b";break;            //větev pro hodnotu x rovnu 'b'

   case 'c': cout<<"Stisknuta c";                       //na konci nemusí být break

   }                                                          //konec těla přepínače

while(getchar()!='e');                                          //čekání na stisk 'e'

return 0;                                                               //opuštění konzolové aplikace

 

Program deklaruje proměnnou x jako char a přímo ho modifikuje volání funkce getchar(), které zapíše na alokované místo v paměti pro x (1Byte) hodnotu prvního znaku v klávesnicovém buferu. Příkaz switch má svůj vstupní parametr jako hodnotu x, což je hodnota uložená na adrese v paměti. Jedná se o hodnotu int, se kterou pracuje switch. Vstoupí-li klávesa „a“ je to 97 jako int, „b“ =98 a tak dále. V těle switch jsou definovány tři větve case, které mají své hodnoty ‘a‘, ‘b‘, ‘c‘, což pro case představuje 97, 98, 99 jako int. Může se dávat příkaz default na začátek těla switch. Při porovnávání s case  je ale stejně vykonán jako poslední. Chybějící break v poslední větvi není přímo logickou chybou, neboť break je nahrazen funkcí ukončovací složené závorky.

 

 

 



Abecední seznam všech článků Vyhledání pojmů ve článcích




Mikropočítače a jejich programování
Nízká forma programování, assembler a struktura procesorů.
knihy/mikropocitace/obsah_mikro1.php
Odkazník o programování
Rejstřík klíčových slov pro programování ve vyhledávačích.
programovani/programovani.php
Databáze ikon
Ikony a malé obrázky pro tlačítka či jiné použití
datove_zdroje/icony/icony.php
JavaScript - ukázky
Příklady užití některých často používaných efektů na stránky.
katalogy/javascript
Zapojení kabelů
Popis vývodů a křížení různých propojovacích kabelů
konektory.php
Databáze obrázků
Malé a velké obrázky, podlkady, tlačítka, okrasné čáry a pod.
datove_zdroje/obrazky
Animované obrázky
Animované gify a malé obrázky pro všeobecné využití.
datove_zdroje/animace
CSS html vlasnosti
Přehled CSS vlastností pro tvorbu webu
datove_zdroje/stranky/css
Procesory a mikroprocesory
Obecný úvod do základů mikroprocesorové techniky, architektury počítačů
knihy/mikroprocesory/obsah_mikro2.php
Otevře stránky Fulltextové vyhledávání na celém serveru
Digitalizované odborné knihy
Velká encyklopedie pojmů a zkratek
Česko - anglicko - německý technický slovník
Klasický katalog firem, služeb a stránek
OnLine překladač  vět a textů (nepoužívá Google)
Stránky pro chvíle oddechu od studia, relaxace
Katalog českých firem dle technologií
Internetový odkazník
Otevře hlavní stranu pro oddíl programování




 Wikipedie   Seznam stránek   Kapitoly témat   Významné servery   Klíčová slova 








Otevře hlavní stranu společnosti AmaPro

Všechna práva vyhrazena. Určeno jen pro osobní využití. Bez předchozího písemného souhlasu správce www.amapro.cz je zakázána jakákoli další publikace, přetištění nebo distribuce jakéhokoli materiálu nebo části materiálu zveřejněného na www.amapro.cz a to včetně šíření prostřednictvím elektronické pošty. Články, jejichž přímým autorem není amapro.cz lze publikovat pouze se souhlasem jejich majitelů či administrátoru příslušného webu.