Logické operátory: negace

Třetí logický operátor, ! (vykřičník), se nazývá negace. Obrátí booleovskou hodnotu na opačnou: !true je false a !false je true. Čtěte ho jako „ne“:

bool prsi = false;

if (!prsi) {
    printf("Deštník nepotřebuji\n");
}

Tento kód vypíše:

Deštník nepotřebuji

prsi je false, takže !prsi je true a blok se provede. Podmínku čtěte jako „pokud neprší“. Mohli byste napsat i prsi == false. Znamená to totéž, ale ! je kratší.

Negace se hodí hlavně u booleovských proměnných a při spojování podmínek. „Obchod má otevřeno a není svátek“ je je_otevreno && !je_svatek. U porovnání ji obvykle nepotřebujete: místo „věk není aspoň 18“ napište rovnou opačné porovnání, vek < 18.

! se týká jen toho, co stojí hned za ním. Když chcete obrátit celé porovnání nebo spojenou podmínku, dejte ji do závorek: !(body >= 50) nebo !(ma_ridicak && ma_auto). Bez závorek dostanete něco jiného:

int body = 30;

if (!body >= 50) {
    printf("Neprospěl\n");
}

Překladač ohlásí:

error: logical not is only applied to the left hand side of this comparison [-Werror,-Wlogical-not-parentheses]

V !body >= 50 se ! týká jen body. !body je nepravda, tedy 0, protože 30 není 0, a 0 >= 50 je nepravda, takže by program Neprospěl nevypsal nikdy. Mnoho překladačů to propustí jen s varováním, tady je to chyba. Správně je !(body >= 50), nebo ještě jednodušeji body < 50.

Pokyny

Místo komentáře napište příkaz if, který vypíše Půjdu ven, pokud nefunguje internet. Použijte !.

Ven se vyplatí jít, jen když neprší. Rozšiřte podmínku pomocí && tak, aby byla pravdivá, jen když nefunguje internet a zároveň neprší (!prsi). Pak přidejte větev else, která vypíše Budu číst knížku.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

9/12