====== Podmínky ======
Podmínky umožňují větvení programu. Jsou jimi vyhodnocovány podmínky a podle toho buď vykonávány či nevykonávany určité funkce.
===== Syntaxe if a if-else =====
If je tím nejzákladnějším druhem podmínky, obsahuje nejdříve klíčové slovo ''if'', samotnou podmínku (v kulatých závorkách ''()'')a dále tělo podmínky (ve složených závorkách ''{}''), takto:
if (podmínka) {
tělo podmínky //Vykoná se, pokud je podmínka pravdivá
}
Pokud je podmínka vyhodnocena jako pravdivá (je rovna 1), vykoná se tělo podmínky (tedy všechny příkazy a funkce ve složených závorkách), například:
int i;
if (i>5) {
printf("Hodnota promenne i je vetsi nez 5.");
}
Složené závorky můžeme také vynechat, v takovém případě se vykoná pouze první funkce následující po kulatých závorkách.
If-else je jakési rozšíření podmínky If, začátek je stejný jako u If, ale dále následuje klíčové slov ''else'' a další tělo podmínky (opět ve složených závorkách''{}''), takto:
if (podmínka) {
první tělo podmínky //Vykoná se, pokud je podmínka pravdivá
} else {
druhé tělo podmínky //Vykoná se, pokud podmínka není pravdivá
}
Pokud je podmínka vyhodnocena jako pravdivá (je rovna 1), vykoná se první tělo podmínky (tedy všechny příkazy a funkce ve prvních složených závorkách), v opačném případě se vykoná druhé tělo podmínky (v druhých složených závorkách) například:
int i;
if (i>5) {
printf("Hodnota promenne i je vetsi nez 5.");
} else {
printf("Hodnota promenne i je mensi nebo rovna 5.");
}
===== Syntaxe Switch =====
Vysvětleno na [[http://www.linuxsoft.cz/article.php?id_article=741|Linuxsoftu]].
Switch je pokročilejší podmínka, nejčastěji používaná jako zjednodušení zápisu několikanásobného If-else (tedy např. If-else if-else if-else).
Zápis začíná klíčovým slovem ''switch'', následuje nějaká //hodnota// v kulatých závorkách ''()'' a poté tělo podmínky ve složených závorkách.
Tělo podmínky obsahují klíčová slova ''case'' a ''default''. ''Case'' použijeme, když chceme porovnat //hodnotu v kulatých závorkách// s jinou hodnotou, kterou zapíšeme za daný ''case'' a dále napíšeme dvojtečku.
Těchto //casů// můžeme napsat do Switche hned několik pokaždé platí, že pokud //hodnotu v kulatých závorkách// je rovna //hodnotě v casu//, vykonají se všechny příkazy a funkce až do konce těla podmínky Switche (tedy i přes další //casy// a ''default''), popřípadě prvního příkazu ''break''.
Klíčové slovo ''default'' následované opět dvojtečkou má podobnou funkci jako //casy//, vyhodnotí se pozitivně , pokud se pozitivně nevyhodnotil žádný ''case'' vždy bez ohledu na hodnotu. Proto se //default// nepoužívá na začátku bloku s //case//, protože by ihned platil.
int i;
switch (i) {
case 1: printf("i je rovno 1");
case 2: printf("i je rovno 1 nebo 2"); //case 1 nebyl zakončen breakem, proto se vykoná i tento příkaz a i může být rovno 1
break;
case 3: printf("i je rovno 3");//case 1 a 2 byly ukončeny breakem, tento příkaz už se tedy nevykoná, pokud je i rovno 1 nebo 2
break;
default: printf("i neni rovno 1, 2 ani 3");
}
===== Ternární operátor =====
Ternární operátor je, jak už název vypovídá, operátor, který pracuje hned se třemi operandy; zapisuje se takto:
''[první operand]?[druhý operand]:[třetí operand]''
Je jakousi zkrácenou formou podmínky If-else, až na to, že je to výraz (což značně omezuje jeho použití). Tedy:
''podmínka?hodnota když ano:hodnota když ne''
Pokud je podmínka před otazníkem pravdivá (rovná 1), vrátí se hodnota výrazu za otazníkem a před dvojtečkou, v opačném případě se vrátí hodnota výrazu za dvojtečkou, např.:
int i;
printf(i>5?"Hodnota promenne i je vetsi nez 5.":"Hodnota promenne i je mensi nebo rovna 5.");
===== Líné vyhodnocování =====
Zdroj: [[wp>Zkr%C3%A1cen%C3%A9_vyhodnocov%C3%A1n%C3%AD|Wikipedie]]
tedy
int function a() {printf("1"); return 1;}
int function b() {printf("2"); return 0;}
if(a() || b()) {...}
Toto na výstup vypíše 1, protože po vyhodnocení a() je jasné, že (PRAVDA nebo COKOLI) je PRAVDA, tedy není třeba vyhodnocovat b()