Struktura Switch
Switch struktura je velmi podobná IF struktuře. Mějme program
#include <stdio.h>
int main()
{
int x = 20;
if (x == 10) {
printf("Hodnota je 10\n");
} else if (x == 20) {
printf("Hodnota je 20\n");
}
return 0;
}
Tento program můžeme přepsat pomocí struktury Switch. Struktura switch má následující diagram

V kódu bychom měli
#include <stdio.h>
int main()
{
int x = 20;
switch (x) {
case 10:
printf("Hodnota je 10\n");
break;
case 20:
printf("Hodnota je 20\n");
break;
}
return 0;
}
Dostáváme stejný výsledek jako v programu s IF strukturou. Switch se skládá z hodnoty, kterou dáme do závorek za klíčové slovo switch (v našem případě proměnná x).
switch (x)
Dále se skládá z jednotlivých case bloků (někdy také říkáme case větví).
case 10:
Jak se program vykonává
- Vytvoří se proměnná typu
ints identifikátoremxa nastaví se jí hodnota20 switchzkontroluje hodnotu proměnnéx- Zkontroluje se, zda je hodnota
xrovná10- není, pokračuje se na dalšícase - Zkontroluje se, zda je hodnota
xrovná20- ano, je - Vytiskne se
Hodnota je 20 - Ukončí se
switchpomocí klíčového slovabreak - Program se ukončí pomocí
return 0
Hodnota "default"
Co kdybychom chtěli mít ve Switch i case, který by odchytil libovolnou jinou hodnotu? Něco jako else v if struktuře.
Mějme program s IF strukturou
#include <stdio.h>
int main()
{
int x = 25;
if (x == 10) {
printf("Hodnota je 10\n");
} else if (x == 20) {
printf("Hodnota je 20\n");
} else {
printf("Hodnota je neznama\n");
}
return 0;
}
K tomu nám slouží v případě switch struktury klíčové slovo default.
Předchozí program můžeme přepsat pomocí switch struktury následovně
#include <stdio.h>
int main()
{
int x = 25;
switch (x) {
case 10:
printf("Hodnota je 10\n");
break;
case 20:
printf("Hodnota je 20\n");
break;
default:
printf("Hodnota je neznama\n");
break;
}
return 0;
}
Při spuštění dostáváme
Hodnota je neznama
K čemu slouží klíčové slovo break? Ukončuje nám aktuální case. Můžeme se podívat, co se stane, když ho tam nedáme. Změňme hodnotu x na 10.
#include <stdio.h>
int main()
{
int x = 10;
switch (x) {
case 10:
printf("Hodnota je 10\n");
case 20:
printf("Hodnota je 20\n");
break;
default:
printf("Hodnota je neznama\n");
break;
}
return 0;
}
Vytiskne se nám
Hodnota je 10
Hodnota je 20
Jak se program vykonává
- Vytvoří se proměnná typu
ints identifikátoremxa nastaví se jí hodnota10 switchzkontroluje hodnotu proměnnéx- Zkontroluje se, zda je hodnota
xrovná10- ano, je - Vytiskne se
Hodnota je 10 Case 20se ignoruje- Vytiskne se
Hodnota je 20 - Ukončí se
switchpomocí klíčového slovabreak - Program se ukončí pomocí
return 0
Toho platí i pro default sekci. Vynechme v našem programu i druhý break
#include <stdio.h>
int main()
{
int x = 10;
switch (x) {
case 10:
printf("Hodnota je 10\n");
case 20:
printf("Hodnota je 20\n");
default:
printf("Hodnota je neznama\n");
}
return 0;
}
Tisknou se všechny větve. Dostáváme
Hodnota je 10
Hodnota je 20
Hodnota je neznama
Pokud bychom nastavili x na 20, tisklo by se
Hodnota je 20
Hodnota je neznama
Toho se dá využít v případě, že chceme pro několik hodnot stejný kód
#include <stdio.h>
int main()
{
int x = 10;
switch (x) {
case 10:
case 20:
printf("Hodnota je 10 nebo 20\n");
break;
default:
printf("Hodnota je neznama\n");
}
return 0;
}
Což bychom mohli napsat pomocí IF struktury například takto
#include <stdio.h>
int main()
{
int x = 10;
if (x == 10 || x == 20) {
printf("Hodnota je 10 nebo 20\n");
} else {
printf("Hodnota je neznama\n");
}
return 0;
}
Kdy použít if a kdy switch? Switch nám dává jasně najevo, že kontrolujeme jeden výraz akorát na různé hodnoty. V případě if můžeme mít mnohem komplexnější podmínky.
Je to hodně o osobních preferencích. Někdo nepíše switch nikdy, někdo ho používá pokaždé, když může. Nelze říct, že jedno řešení je výrazně lepší než to druhé. Pokud se vám switch líbí, tak ho můžete používat.
Odkazy
Následující kapitola: Rekurzivní funkce