Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

10.3.1 Loogiset operaattorit &&, || ja !

	&&  ja
	||  tai
	!   muuttaa ehdon arvon päinvastaiseksi (eli 0- >1, <>0 - >0) 

Mikäli yhdistettävät ehdot koostuvat esimerkiksi vertailuoperaattoreiden käytöstä, kannattaa ehtoja sulkea sulkuihin, jottei seuraa turhia epäselvyyksiä.

	if ( ( rahaa > 50 ) && ( kello < 19 ) )  printf("Mennään elokuviin!\n);
	if ( ( rahaa < 50 ) || ( kello >3 ) )    printf("Ei kannata mennä kapakkaan!\n");
	if ( ( 8 <= kello ) && ( kello <= 16 ) ) printf("Pitäisi olla töissä!\n");
	if ( ( !rahaa ) || ( sademaara < 10 ) )  printf("Kävele!\n");

Usein tulee vastaan tilanne, jossa pitäisi testata on luku jollakin tietyllä välillä. Esimerkiksi onko

	1900 <= vuosi <= 1999

palauttaisi C-kielisenä lauseena aina 1. Miksikö? Koska lause jäsentyy

	( 1900 <= vuosi ) <= 1999   
	     0 tai 1      <= 1999  eli aina 1

Oikea tapa kirjoittaa väli olisi:

	if ( ( 1900 <= vuosi ) && ( vuosi <= 1999 ) ) ... 

Huomattakoon edellä miten väliä korostettiin kirjoittamalla välin päätepisteet lauseen laidoille.

C- kielen sidontajärjestyksen ansiosta lause toimisi myös ilman sisimpiä sulkuja, mutta ne kannattaa pitää mukana varmuuden vuoksi. Vertailtavat kannattaa kirjoittaa nimenomaan tähän järjestykseen, koska tällöin vertailu muistuttaa eniten alkuperäistä väliämme!

Vastaavasti jos arvon halutaan olevan välin ulkopuolella, kannattaa kirjoittaa:

	if ( ( vuosi < 1900 ) || ( 1999 < vuosi ) ) ... 

Tällöin epäyhtälöiden suuntaa ei joudu koskaan miettimään, vaan arvot ovat aina siinä järjestyksessä kuin lukusuorallakin:

	          1900  vuosi   1999               1900<=vuosi && vuosi <=1999
	-----------o==============o--------------------
	
	  vuosi  1900          1999  vuosi         vuosi<1900 || 1999 <vuosi 
	===========o--------------o====================


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys