Příkaz switch
🤓 Tato sekce obsahuje doplňující učivo. Pokud je toho na vás moc, můžete ji prozatím přeskočit a vrátit se k ní později.
V případě, že byste chtěli provést rozlišný kód v závislosti na hodnotě nějakého výrazu,
a tento výraz (např. hodnota proměnné) může nabývat většího množství různých hodnot, tak může být
zdlouhavé použít spoustu if
ů:
if (a == 0) {
...
}
else if (a == 1) {
...
}
else if (a == 2) {
...
}
...
Jako jistá zkratka může sloužit příkaz switch
. Ten má následující syntaxi:
switch (<výraz>) {
case <hodnota A>: <blok kódu>
case <hodnota B>: <blok kódu>
case <hodnota C>: <blok kódu>
...
}
Tento příkaz vyhodnotí výraz v závorce za klíčovým slovem switch
. Pokud se v bloku kódu za závorkou
nachází klíčové slovo case
následované hodnotou odpovídající hodnotě výrazu, tak program začne vykonávat
blok kódu, který následuje za tímto case
. Dále se program bude vykonávat sekvenčně až do bloku switch
e
(při tomto vykonávání už se klíčová slovo case
i hodnoty za ním ignorují)1.
1Toto chování se anglicky označuje jako fallthrough.
Tento program vypíše 52
, protože předaný výraz má hodnotu 5
, takže program skočí na blok za
case 5
a dále pokračuje sekvenčně až do konce bloku switch
příkazu.
#include <stdio.h>
int main() {
switch (5) {
case 0: printf("0");
case 1: printf("1");
case 5: printf("5");
case 2: printf("2");
}
return 0;
}
Klíčové slovo default
Do bloku kódu příkazu switch
lze předat i blok pojmenovaný default
, na který program skočí v
případě, že se nenalezne žádný case
s odpovídající hodnotou:
#include <stdio.h>
int main() {
switch (10) {
case 0: printf("0");
case 1: printf("1");
case 5: printf("5");
case 2: printf("2");
default: printf("nenalezeno");
}
return 0;
}
Klíčové slovo break
Velmi často chceme provést pouze jeden blok kódu u jednoho case
a nepokračovat po něm až do konce
celého switch
bloku. Běžně se tedy za každým case
blokem používá příkaz break
, který ukončí
provádění celého switch
příkazu:
#include <stdio.h>
int main() {
switch (1) {
case 0: printf("0"); break;
case 1: printf("1"); break;
case 2: printf("2"); break;
default: printf("nenalezeno");
}
return 0;
}
Hodnota za case
Hodnota za klíčovým slovem case
musí být konstantní, jinak řečeno musí to být hodnota známá již v
době překladu programu, např. literál. Za case
tak nelze dát např.
výraz obsahující název proměnné.
Použití příkazu switch
Výraz v závorce za switch
vestavěný datový typ, v podstatě se zde dá použít pouze celé číslo.
Nelze jej použít např. na porovnávání struktur či řetězců.
Jeho chování také může být matoucí, pokud se za jednotlivými case
konstrukcemi nepoužije příkaz
break
. Proto tak doporučujeme ze začátku používat pro podmíněné vykonávání spíše příkaz if
.