true
(tosi) tai false
(epätosi).
Esimerkiksi seuraava koodi määrittelee totuusarvomuuttujan
(tyyppi bool
) ja asettaa siihen arvon true
:
bool x = true;Totuusarvo myös vastaa lukua niin, että
true
on 1 ja false
on 0.
Toisaalta mikä tahansa lukuarvo voidaan tulkita totuusarvona:
luku 0 on false
ja
kaikki muut luvut ovat true
.
==
, !=
,
<
, <=
,
>
ja >=
.
Esimerkiksi lauseke a+b == c
on tosi,
jos a+b
ja c
ovat yhtä suuret.
Tavalliset loogiset operaattorit ovat
&&
(ja) sekä ||
(tai).
Esimerkiksi lauseke x >= 3 && x <= 8
on tosi,
jos x
on välillä 3...8.
Lisäksi operaattori !
lausekkeen edessä
muuttaa sen totuusarvon käänteiseksi.
Esimerkiksi lausekkeet x > 5
ja !(x <= 5)
tarkoittavat samaa.
Voimme selventää totuusarvoisen lausekkeen tulkintaa sulkujen avulla.
Esimerkiksi lauseke
x%4 == 0 && (x%100 != 0 || x%400 == 0)
on tosi silloin, kun x
on karkausvuosi.
Lauseke vaatii, että x
on jaollinen 4:llä
ja lisäksi jos x
on jaollinen 100:lla,
se on jaollinen myös 400:lla.
Totuusarvoisen lausekkeen osat käydään läpi vasemmalta oikealle,
ja jos tulos on jo selvä, jäljellä olevia osia ei tarkasteta.
Esimerkiksi lausekkeen b != 0 && a/b == 2
osaa a/b == 2
ei tarkasteta, jos b == 0
,
koska tulos on varmasti false
.
Niinpä ei haittaa, vaikka osassa
a/b == 2
odottaisi nollalla jakaminen.
if (ehto) { koodi }Tässä ehto on jokin totuusarvoinen lauseke. Jos ehto pätee, suoritetaan lohkossa oleva koodi, ja muuten ei tapahdu mitään. Voimme myös lisätä toisen haaran:
if (ehto) { koodi1 } else { koodi2 }Nyt jos ehto pätee, suoritetaan koodi 1, ja muuten suoritetaan koodi 2.
Tavallinen tapa on ketjuttaa ehtoja näin:
if (ehto1) { koodi1 } else if (ehto2) { koodi2 } else if (ehto3) { koodi3 ... }Tämä koodi käy läpi ehtoja ja suorittaa ensimmäisen koodin, jota edeltävä ehto pätee.
int ika; cout << "Kuinka vanha olet? "; cin >> ika; if (ika < 0 || ika > 120) { cout << "Mahdotonta"; } else if (ika < 18) { cout << "Olet alaikäinen"; } else { cout << "Olet aikuinen"; }Jos ikä on alle 0 tai yli 120, viestinä on "Mahdotonta". Muuten ohjelma tulostaa "Olet alaikäinen", jos ikä on alle 18, tai "Olet aikuinen", jos ikä on ainakin 18.
Ohjelman suoritus voi näyttää seuraavalta:
Kuinka vanha olet? 10 Olet alaikäinen
=
ja ==
välillä on tärkeä ero:
=
asettaa muuttujan arvon,
kun taas ==
vertailee arvoja.
Tavallinen ohjelmointivirhe on kirjoittaa ehdossa
==
:n sijasta =
:
if (x = 5) { cout << "apina"; }Tässä ehtona on lauseke
x = 5
eli muuttujan asetus.
Lausekkeen arvo on 5, joka on tosi,
koska kaikki luvut paitsi 0 ovat tosia.
Niinpä ehto on aina tosi, eli koodi tulostaa aina "apina".
{
ja }
.
Esimerkiksi seuraavat koodit toimivat samalla tavalla:
if (x == 5) { cout << "apina"; }
if (x == 5) cout << "apina";Seuraava koodi ei toimi niin, kuin ehkä voisi kuvitella:
if (x == 5) cout << "apina"; cout << "banaani";Koska lohkoa ei ole, ehto vaikuttaa vain seuraavaan lauseeseen eli koodi vastaa tätä:
if (x == 5) { cout << "apina"; } cout << "banaani";
a ? b : c
saa arvon b
,
jos ehto a
pätee,
ja muuten arvon c
.
Ehdollista lauseketta voi käyttää vaikkapa näin:
int s = x%2 == 0 ? 5 : 8;Tämä vastaa seuraavaa koodia:
int s; if (x%2 == 0) { s = 5; } else { s = 8; }