Hlavní strana -> Programování v C -> 07. If-else, vnořování příkazů

07. If-else, vnořování příkazů

Opět všechny zdravím. Přemohl jsem se tentokrát k rozebrání příkazu if-else a vnořování příkazů.

Příkazy if jsme už probrali, takže předpokládám, že to všichni umíte. Příkaz if-else je vlastně pokud-jinak. Takže když vyjde podmínka v if pravdivá, tak se provedou příkazy za if, ale za else už ne a v případě, že je if nepravdivý, tak se provedou pouze příkazy za else. Je to jednodušší, než použít dvě podmínky a taky je to rychlejší. Asi takhle:

if(výraz) příkaz; event. blok příkazů
else příkaz; event. blok příkazů

#include <stdio.h>

void main(void)
{
    int x;

    printf("Zadejte cele cislo.\n");
    scanf("%d", &x);
  
    if(x>0) printf("Cislo je vetsi nez nula.\n);
    if(x>0) printf("Cislo je mensi nez nula.\n);
    /* slo by zapsat podobne takto */
    if(x>0) printf("Cislo je vetsi nez nula.\n);
    else printf("Cislo neni vetsi nez nula.\n);

}

To bychom měli k if-else. Zbývá nám vnořování příkazů. Příkazy do sebe mohou být vnořovány (ne všechny) asi jako podadresáře do adresářů. Např:

#include <stdio.h>

void main(void)
{
    int x;

    printf("Zadejte cele cislo.\n");
    scanf("%d", &x);

    if(x>0){
        printf("Cislo je kladne.\n");
        if(x==5) printf("Cislo je pet.\n");
        if(x==10) printf("Cislo je deset.\n");
    }
    else{
        printf("Cislo neni kladne.\n");
        if(x==0) printf("Cislo se rovna nule.\n");
        else printf("Cislo je zaporne.\n");
    }
}

Vnořování sice není nekonečné, ale podle normy ANSI C by překladač měl umožnit zanoření nejméně 15 úrovní a to je poměřně hodně. Osobně jsem snad ještě nešel nad 4. Předchozí příklad doufám nemusím vysvětlovat, protože je dobře srozumitelný. No a ke konci tady dám ještě if else if(výraz) příkaz. Tímto příkladem se dá udělat spousta podmínek s tím rozdílem, že jakmile se narazí na pravdu, tak se ostatní else if přeskočí. Takhle:

#include <stdio.h>

void main(void)
{
    int x;

    printf("Zadejte cele cislo.(0-10)\n");
    scanf("%d", &x);

    if(x==0) printf("Cislo je nula.\n);
    else if(x==1) printf("Cislo je jedna.\n");
    else if(x==2) printf("Cislo je dve.\n");
    else if(x==3) printf("Cislo je tri.\n");
    else if(x==4) printf("Cislo je ctyri.\n");
    else if(x==5) printf("Cislo je pet.\n");
    else printf("Cislo neni v seznamu.\n");
    /* cislo je mensi nez 0 nebo je vetsi nez 5 */
}

Pokud někdo zadá předchozímu programu číslo 2, tak se budou vyhodnocovat pouze první if a první 2 else if, kde se zjistí rovnost, vypíše se, že číslo je dvě a ostatní else if už jsou přeskočeny a nezpomalují program. No sice krátký díl, ale díl. Někdy přííštěee... K.

Zpět

Programování v C | CZ 175/477 | Mapa stránek
Bc. Petr Klimánek, student Ostravské univerzity v Ostravě