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řebujiprsi 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.
Jak psát:
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
9/12