Ehdon toteutuminen saattaa johtaa uusien ehtojen asettamiseen. Tällöin joudutaan kirjoittamaan sisäkkäisiä if-lauseita:
if (ehto1) if (ehto2) lause1; else lause2; else lause3;
Sisäkkäisissä ehtolauseissa kannattaa käyttää kokonaisuuksien ryhmittelyyn lohkon määrääviä sulkuja {}, vaikkei niitä aina välttämättä tarvittaisikaan. Ne selkeyttävät kokonaisuutta ja vähentävät hämäriä virhetilanteita.
Jos halutaan selvittää onko positiivinen kokonaisluku parillinen vai pariton, voidaan kirjoittaa seuraava if-lause:
if (luku > 0) { if (luku%2 == 0) cout << "Parillinen luku." << endl; else cout << "Pariton luku." << endl; } else cout << "Negatiivinen luku tai nolla." << endl;
Lausekkeessa käytetään modulo-operaattoria (%), joka palauttaa jakolaskun jakojäännöksen. Parillisilla luvuilla jäännös on nolla ja parittomilla yksi.
Lausekkeen jäsennyksessä on huomattava, että else-lause liittyy aina edelliseen samassa lohkossa olevaan if-lauseeseen (siis sellaiseen, jolla ei vielä ole omaa else-osaansa). Edellä olevassa esimerkissä if- ja else-lauseiden suhde oli selkeästi osoitettu sekä sisentämällä että käyttämällä lohkosulkuja (joita ei tässä välttämättä tarvittaisi).
Lohkosulkuja kannattaa if-kokonaisuuksissa totutella käyttämään aina, jos kyseessä on vähänkin monimutkaisempi rakenne. Jos ohjelmassa esiintyy if-lauseita ilman else-osaa, voi huolimattomalla lohkosulkujen käytöllä (tai käyttämättä jättämisellä) saada aikaan tilanteita, joissa kääntäjä liittää else:n aivan eri if-lauseeseen kuin oli tarkoitus.
Esimerkki
/* ********************************************************* APIP.CPP Tutkitaan, onko nyt aamupäivä (7-12), iltapäivä (12-17) vai jotain muuta. ********************************************************* */ #include <iostream.h> int main(void) { int tunti; cout << "Anna tämänhetkinen tunti > "; cin >> tunti; if (tunti < 17) { if (tunti < 12) { if (tunti >= 7) cout << "On aamupäivä." << endl; else cout << "Ei ole aamu- eikä iltapäivä." << endl; } else cout << "On iltapäivä." << endl; } else cout << "Ei ole aamu- eikä iltapäivä." << endl; return 0; }
Mieti, kuinka esimerkin ohjelman voisi toteuttaa toisin (saada kenties yksinkertaisemmaksi).
Tee ohjelma, joka kysyy käyttäjän
ikää ja tulostaa iän mukaan
ikä < 15 "Olet lapsi"
15 <= ikä < 20 "Olet nuori"
ikä >= 20 "Olet aikuinen"