====== 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()