C++/Ohjausrakenteet

Wikikirjasto

< C++
Loikkaa: valikkoon, hakuun

Tämä luku kertoo ohjausrakenteista. Ohjausrakenteet ovat lauseita, jotka vertailevat kahta tai useampaa arvoa toisiinsa. Ohjausrakenteiden avulla voidaan tehdä monimutkaisia ohjelmia, jonka suoritusjärjestys muuttuu ehtojen tulosten perusteella. Ilman ohjausrakenteita ei pystyisi ratkaisemaan kuin ongelmia, joilla on vain yksi ratkaisutapa. C++:ssa ohjausrakenteita on monenlaisia, ja niitä yhdistelemällä on mahdollista hallita ohjelman kulkua tehokkaasti.

Sisällysluettelo

[muokkaa] Ehtolause

Ehtolause eli if-lause on ohjausrakenteista yksinkertaisin. Ehtolauseen muoto C++-kielessä on:

if (ehto)
    lause;

Ehto voi olla mikä tahansa vertailu, joka palauttaa totuusarvon, true tai false. C++-kielessä ohjelmalauseen voi korvata koodilohkolla joka kirjoitetaan aaltosulkujen väliin. Alla esimerkkejä erilaisista ehtolauseista.

int luku = 3; 
if (luku < 5)
    std::cout << "Tulostetaan tekstiä.";

Jos ohjelmalauseita on enemmän kuin yksi, ne täytyy kirjoittaa aaltosulkujen sisään.

if (luku > 2)
{
    luku = 1;
    std::cout << "Tulostetaan lisää.";
}

Ehtolauseita voidaan laajentaa käyttämällä else-lohkoa. Tässä lohkossa olevat lauseet suoritetaan, jos ehto on epätosi.

if (luku > 2)
{
    // Suoritetaan jos ehto on tosi
}
else
{
    // Suoritetaan jos ehto on epätosi
}

[muokkaa] While-silmukka

While-silmukka on yksinkertainen toistorakenne. Siinä määritellään vain ehto, jonka ollessa tosi, toistetaan tietyt koodilauseet. Silmukan rakenne on:

while (ehto)
{
    // tee jotakin
}

Tämä ohjelma tulostaa samalle riville 10 kertaa tekstin "Hello World!".

// Tarvittava muuttuja toistorakennetta varten
int x = 0;

// Toista niin kauan kunnes x ei ole pienempi kuin 10
while(x < 10)
{
    std::cout << "Hello World!" << std::endl;
    // Lisää yhdellä muuttujaa x
    ++x;
}

[muokkaa] Do-while-silmukka

Do-while-silmukka on toisenlainen versio while-silmukasta. Sen ainoa ero tavalliseen while-rakenteeseen on, että silmukka toistuu vähintään kerran. Do...while-rakennetta käytetään usein syötöntarkistuksessa, koska sen avulla voidaan helposti varmistaa että käyttäjä syöttää esimerkiksi jonkin tietyn arvon. Silmukan rakenne on:

do {
    // tee jotakin
} while (ehto);

Alla olevan esimerkin silmukka toistuu kerran. Vastaavassa tilanteessa while-silmukka ei toistuisi kertaakaan.

int x = 1;
do {
    std::cout << "Teksti tulostuu kerran." << std::endl;
} while (x == 0);

[muokkaa] For-silmukka

For-silmukka on toistorakenne, joka toistaa silmukan määrätyn monta kertaa. Se vastaa toiminnaltaan while-silmukkaa, mutta sitä käytetään yleensä jos toistojen määrä tiedetään etukäteen. Silmukan rakenne on seuraavanlainen:

for (alustus; ehto; päivitys)
{
    // tee jotakin
}

Silmukka koostuu kolmesta lausekkeesta. Ensimmäinen on alustuslauseke, jossa yleensä alustetaan silmukassa käytettävä laskuri. Toinen lauseke on ehtolauseke, jonka perusteella silmukkaa joko jatketaan tai se pysäytetään. Kolmas lauseke on ns. päivityslauseke, joka suoritetaan aina silmukan jälkeen. Sitä käytetään yleensä laskurin arvon nostamiseen tai laskemiseen. Seuraava esimerkki tulostaa kaikki luvut nollan ja kymmenen välillä.

for (int i = 0; i <= 10; ++i)
{
    std::cout << i << std::endl;
}

[muokkaa] Break ja continue

Break on kätevä, koska sillä voi keskeyttää ohjelman siihen paikkaan. Continuella taas voi jatkaa ohjelman suoritusta vaikka kesken while silmukan. Seuraava esimerkki näyttää, kuinka niitä käytetään.

  if(a == 34) {
     break; // ohjelma keskeytyy, jos a on 34
  }
  if(a == 33) {
     while(2) {  // loppumaton silmukka
        if(a == 34) {
           cout << "tämä silmukka jatkuu ikuisesti";
        }
        if(a == 33) {
           continue; // while silmukka loppuu
        }
     }
  }

[muokkaa] Switch-rakenne

If-rakenteen sijasta voi käyttää switch-rakennetta. Default-kohtaa käytetään kun muuttujaa vastaavaa arvoa ei löydy. Sopivan vaihtoehdon löytyessä ohjelman kulku voidaan katkaistaan break-käskyllä, koska ilman sitä kaikki loputkin käydään läpi.

switch (muuttuja)
{
  case 0:
    // Arvo on nolla, älä tee mitään ja mene seuraavaan
  case 1: case 2:
    // Arvo on yksi tai kaksi, katkaise ohjelman kulku
    break;
  case 3:
  {
    // Arvo on kolme
    // Useampia lauseita
    break;
  }
  default:
    // Arvo on joku muu
    break;
}

[muokkaa] Rakenteiden yhdisteleminen

Henkilökohtaiset työkalut