Dnes dokončíme popis řídících struktur jazyka C.

Příkaz skoku goto
Příkaz goto rozhodně nepatří mezi hojně užívané příkazy, tedy alespoň ne mezi programátory, kteří se drží zásad strukturovaného programování. Použití goto se lze vždy vyhnout, a proto se používá pouze v ojedinělých případech, kdy by se program bez jeho použití značně znepřehlednil.

goto návěští;
.
.
.
návěští: příkaz;


Provedením příkazu goto se vykonávání programu přesune na příkaz, před kterým je uveden odpovídající identifikátor návěští následovaný dvojtečkou. Návěští nemusí být předem deklarováno, a protože pro návěští je vyhrazen vlastní jmenný prostor, mohou být jejich identifikátory shodné s identifikátory obyčejných proměnných.


Příkazy break a continue
Příkaz break může být použit v tělech cyklů (while, do-while, for) a v těle příkazu switch, přičemž jeho použití způsobí okamžité opuštění cyklu (nebo příkazu switch). Jde tedy vlastně o skok na první příkaz za cyklem.
break;


Příkaz continue, na rozdíl od break, může být použit pouze v tělech cyklů a způsobí okamžité započetí dalšího cyklu. Stejně jako u příkazu break se můžeme i na continue dívat jako na příkaz skoku, ale tentokrát se skočí za poslední příkaz těla cyklu.
continue;


while (1){
  c = getch();               // do c se načte znak z klávesnice
  if (c==27) break;          // pokud je stisknuta klávesa ESC, je cyklus ukončen
  if (!isalpha(c)) continue; // není-li znak písmeno, začne se provádět znovu tělo cyklu,
                             // takže už nedojde na...
  putch (c);                 // ...vytištění znaku
}


Příkaz mnohonásobného větvení – switch
Pokud potřebujeme tok programu větvit do více jak dvou směrů, můžeme místo několika do sebe vnořených příkazů if-else využít možností, které nám v C poskytuje příkaz switch.

switch (výraz1){
  case konstantní_výraz: příkazy
  case konstantní_výraz: příkazy
  .
  .
  .
  default: příkazy
}


při provádění příkazu switch je nejdříve vyhodnocen výraz1 a pak se postupně vyhodnocují konstantní_výrazy v návěštích case. V případě, že je nalezeno návěští, kde je konstantní_výraz roven hodnotě výrazu1, začnou se provádět všechny příkazy uvedené za tímto návěštím až do konce příkazu switch. To ale znamená, že se provedou i všechny příkazy v následujících větvích. Pokud tedy chceme, aby se provedla vždy jen jedna větev, lze vykonávání příkazu switch okamžitě zastavit uvedením příkazu break. Aby tedy byl příkaz switch funkčně stejný jako obdobný Pascalský příkaz case, je nutné jako poslední příkaz v každé větvi uvést příkaz break.

Pokud není nalezena žádná vyhovující větev, skočí se na návěští default (pokud je použito), které může být uvedeno kdekoliv v těle příkazu switch.

int c;
.
.
.
switch (c){
    case 1:
    case 2:
    case 3: printf ("Cislo 1, 2, nebo 3"); break;
    case 4: printf ("Cislo 4"); break;
    default: printf ("Jine cislo, nez 1,2,3 nebo 4"); break;
  }



Podmíněný výraz - operátor "?"
Vedle podmíněného příkazu if-else existují v C ještě další způsoby, jak if-podmínky zapsat. Jedním z nich je použití operátoru "?", který je mimochodem jediný operátor v C mající tři operandy. Proto se pro něj často používá název ternární operátor.

výraz1 ? výraz2 : výraz3


Vyhodnocení výrazu s ternárním operátorem probíhá takto: Nejdříve je vyhodnocen výraz1, který by měl být číselného typu. Je-li jeho hodnota určena jako nenulová, je následně vyhodnocen výraz2 a jeho hodnota je zároveň výslednou hodnotou celého výrazu. Výraz3 se vůbec nevyhodnotí a tudíž se neprovedou ani případné postranní efekty. V případě, že je výraz1 vyhodnocen jako nula, je naopak vyhodnocen výraz3 a jeho hodnota je také výsledkem celé operace.

Na rozdíl od příkazu if-else, použití operátoru "?" tvoří výraz a z toho také vyplývají odlišné možnosti jeho použití.

i = a>b?a:b;
// proměnné i se přiřadí vždy větší z čísel [b]a[/b] a [b]b[/b]


Operátor postupného vyhodnocování - ","
Operátor „čárka“ je jeden z mála operátorů, který zajišťuje pořadí vyhodnocení svých operandů. Nejdříve je vyhodnocen levý operand, tedy výraz1, jehož hodnota je ovšem zapomenuta, a který slouží především k vykonání postranních efektů. Jako druhý je pak vyhodnocen výraz2, jehož hodnota je pak i výslednou hodnotou celého výrazu.

výraz1 , výraz2


Operátor čárky se často používá například v řídících částech příkazů for a while, kde jeho použití může vést ke zjednodušení zápisu, nebo kde slouží jako prostředek k vykonání dalších postranních efektů.

for (i=0, j=9; i<10; i++, j--) printf("%d  %d\n", i, j);


Zkrácené vyhodnocování logických operátorů
Při vyhodnocování výrazů s log. operátory && nebo || často stačí k určení výsledné hodnoty vyhodnotit pouze jeden z operandů. Například u výrazů s operátorem logického součinu &&, kdy je první operand vyhodnocen jako nulový, nemůže již vyhodnocení druhého operandu nijak ovlivnit celkový výsledek, který bude také nulový. V C se v takovém případě skutečně pravý operand nevyhodnocuje a tato skutečnost tedy může být využita jako další způsob podmíněného vyhodnocování.

i<0 && (i=0);
!(i<0) || (i=0);


Oba příklady mají stejný efekt: Je-li hodnota proměnné i menší než 0, bude tato hodnota nastavena na 0.