VALINTOJEN TEKEMINEN OHJELMASSA

Erilaisten valintojen tekemiselle C-kielessä on kolme lausetta: if, if...else ja switch..case. Lauseet toimivat ehdon totuusarvon perusteella haarautuen suorittamaan toivotut tehtävät.


if - LAUSE

if-lause muodostuu seuraavasti:

if (ehto) lause;

if-lauseessa testataan ehto ja mikäli ehto on tosi (1) suoritetaan lause. Mikäli ehto on epätosi (0), ohjelma siirtyy seuraavaan suoritettavaan lauseeseen.

Esimerkkissä (alla) Arvasit oikein sekä Ohjelma loppui -tekstit tulostuu näytölle mikäli ohjelman käyttäjä arvasi salanumeron oikein. Mikäli ohjelman käyttäjä arvaa salanumeron väärin ohjelma tulostaa pelkästään Ohjelma loppui -teksti.

/* if-lauseen käyttö */ #include <stdio.h> int main() { const int salanumero = 21; int luku; printf(”Anna ajattelemani numero\n”); scanf(”%d”,&luku); /* jos luku on yhtäsuuri kuin salanumero, tulostuu Arvasit oikein-teksti */ if (luku == salanumero) printf(”Arvasit oikein\n”); printf(”Ohjelma loppui\n"); getch(); return 0; }




OHJELMALOHKON KÄYTTÖ if - LAUSEEN YHTEYDESSÄ

if-komennon suoritus voi olla yksi lause tai useita lauseita. Mikäli if-lauseen ehdon toteumisen seurauksena on suoritettavana useita lauseita, nämä kootaan aaltosulkujen sisään. Ohjelmalohko muodostuu seuraavasti:

if (ehto) { lause_1; lause_2; .... lause_n; }

Mikäli ehto on tosi, suoritetaan aaltosulkujen sisällä olevat lauseet, eli lisäämällä aaltosulkeet saadaan if-lauseelle useampia toimintoja aikaan.

/* if-lauseen käyttö */ #include <stdio.h> int main() { const int SALANUMERO = 21; int LUKU; printf("Anna ajattelemani numero\n"); scanf("%d",&LUKU); if (LUKU == SALANUMERO) { /*seuraavat lauseet suoritetaan mikäli ehto on tosi koska lauseet ovat aaltosulkeiden sisällä*/ printf("Arvasit oikein\n"); printf("Olet voittanut palkinnoksi MAAORAVAN!\n"); } printf("Ohjelma loppui\n"); getch(); return 0; }




SISÄKKÄISET if - LAUSEET

Sisäkkäisten if-lauseiden yleinen muoto on:

if (ehto) if(ehto2) lause;

Toinen if-lause on ensimmäisen if-lauseen rungon osa. Lause suoritetaan vain kun molemmat ehdot ovat tosia.

/* sisäkkäiset if-lauseet */ #include <stdio.h> int main() { const int secretnumber = 21; int number; printf(”Anna ajattelemani numero\n); scanf(”%d”,&number); if (number == secretnumber) /* == yhtäsuuri kuin */ printf(”Arvasit oikein\n”); if (number != secretnumber) /* != erisuuri kuin */ { printf(”Arvasit väärin\n”); if (number > secretnumber) /* > suurempi kuin */ printf("Arvaus liian suuri\n"); if (number < secretnumber) /* < pienempi kuin */ printf("Arvaus liian pieni\n"); } getch(); return 0; }




if ... else LAUSE

if-komentoa käytetää ehdon testaamiseen ja tuloksen mukaisten toimintojen suorittamiseen, jotka suoritetaan kun ehto on tosi. Mikäli ehto on epätosi ei toimintoja suoriteta. Tässä kohti tulee if...else komento käyttökelpoiseksi, joka sallii suoritettavaksi erillisen toiminnon mikäli ehto on epätosi.

Yleinen muoto if...else lauseelle:

if (ehto) lause1; else lause2;

else-osan lause suoritetaan silloin kun ehto on epätosi.

/* else:n käyttö if:n kanssa */ #include <stdio.h> int main() { const int secretnumber = 21; int number; printf("Anna ajattelemani numero\n"); scanf("%d",&number); if (number == secretnumber) printf("Arvasit oikein\n"); else printf("Arvasit väärin\n"); getch(); return 0; }




Alla oleva ohjelma tulostaa tekstin Painoit Y-näppäintä jos ohjelman käyttäjä antoi Y-kirjaimen, muuten tulostuu Et painanut Y-näppäintä -teksti.

/* funktion kutsu ehdossa */ #include <stdio.h> #include <ctype.h> int main() { printf("Paina jotain näppäintä\n"); if (toupper(getchar()) == 'Y') printf("\nPainoit Y-näppäintä"); else printf("\nEt painanut Y-näppäintä"); getch(); return 0; }




Alla, ohjelma pyytää lämpötilaa ja arvioi sen perusteella onko kylmä, sopivan lämmintä vai liian kuuma.

/* sisäkkäiset if - else komennot */ #include <stdio.h> int main() { float temp; printf("Anna nykyinen lampötila\n"); scanf(”%f”, &temp); if (temp < 25) { if (temp > 15) printf("Sopivan lamminta\n"); else printf("Liian kylmaa\n"); } else printf("Nyt tuli hiki\n”); getch(); return 0; }




else-osa kuuluu aina lähimpään if-osaan. Sulkuja käyttämällä voidaan järjestystä muuttaa. Sisäkkäisten if...else lauseiden käytössä on oltava huolellinen, koska else saattaa viitata helposti väärään if-osaan.


Alla, esimerkkiohjelmassa käytetään loogista-operaattoria AND tutkittaessa miltä väliltä annettu luku on.

#include <stdio.h> int main() { int luku1; printf(" Anna luku valilta 1 - 1000: "); scanf("%i",&luku1); if(luku1 > 0 && luku1 < 501) printf("Luku on valilta 1 - 500"); if(luku1 > 500 && luku1 < 1001) printf("Luku on valilta 501 - 1000"); else printf("Luku ei ollut pyydetylta valilta"); getch(); return 0; }




switch ... case LAUSE

C-kielessä on mahdollisuus suorittaa useasta valinnasta yksi käyttämällä switch...case-komentoa.

switch...case komennon yleismuoto:

switch(valinta) { case valinta_1: lause_1; break; case valinta_2: lause_2; break; ........... case valinta_n: lause_n; break; default: oletuslause; }

switch...case-komentoa käytettäessä testataan muuttuja. Mikäli case tapauksista löytyy vastaava suoritetaan lause. Muussa tapauksessa suoritetaan default-osa. default-osa voi myös puuttua.

/* switch käyttöesimerkki */ #include <stdio.h> int main() { char ch; printf(”**** Päävalikko ****\n”); printf(”1. Tekstinkasittely\n”); printf(”2. Taulukkolaskenta\n”); printf(”3. Tietokanta\n\n”); printf(”Valinta\n”); ch = getchar(); switch(ch) { case '1': printf(”\nOlen teksturi”); break; case '2': printf(”\nOlen taulukkolaskuri”); break; case '3': printf(”\nOlen tietokanturi”); break; default: printf(”\nEn ole olemassa\n”); } getch(); return 0; }




switch-komennon yhteydessä on käytettävä break-komentoa. break-komento siirtää ohjelman suorituksen switch-rakennetta seuraavaan ohjelmalauseeseen.