Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

10.13 switch - valintalause

Jäsenrekisteriohjelmamme päävalinta olisi näppärintä toteuttaa switch - lauseella:

menut.05\kerho.cpp - päävalinta switch -lauseella

	int paavalinta(cKerho &kerho)
	{
	  char nappain;
	
	  while (1) {
	
	    paamenu(kerho);  // Huom päämenun muuttunut parametrilista
	
	    nappain = odota_nappain("?012345",0,MERKKI_ISOKSI);
	
	    switch (nappain) {
	      case '?': avustus(nappain);                break;
	      case '0': return 0;
	      case '1': lisaa_uusi_jasen(nappain);       break;
	      case '2': etsi_jasenen_tiedot(nappain);    break;
	      case '3': tulosteet(nappain);              break;
	      case '4': tietojen_korjailu(nappain);      break;
	      case '5': paivita_jasenmaksuja(nappain);   break;
	      default : cout << "Näin ei voi käydä!" << endl;  return 1;
	    }
	
	  }
	}

switch - lauseessa case osien lopuksi break on yleensä välttämätön. break estää suorittamasta seuraavia rivejä.

Joskus harvoin breakin puuttumista voidaan käyttää hyväksi, mutta tällöin pitää olla todella tarkkana:

c-silm\switch.c - swicth, jossa break tahallaan jätetty pois

	switch (operaatio) {
	  case 5:                 /* Operaatio 5 tekee saman kuin 4 */
	  case 4: x *= 2; break;  /*           4 laskee x=2*x       */
	  case 3: x += 2;         /*           3 laskee x=x+4       */
	  case 2: x++;            /*           2 laskee x=x+2       */ 
	  case 1: x++; break;     /*           1 laskee x=x+1       */ 
	  default: x=0; break;    /* Muut nollaavat x:än            */
	}

Lause default suoritetaan jos mikään case- osista ei ole täsmännyt (tai tietysti jos jokin break puuttuu). default- lauseen ei tarvitse olla viimeisenä, mutta tällöin vaaditaan taitavaa breakin käyttöä, siis paras pitää default viimeisenä!

Yleistä switch- lausetta ei voi korvata joukolla if- lauseita käyttämättä goto- lausetta. Mikäli kuitenkin jokaisen case rakenteen perässä on break, voidaan switch- korvata sisäkkäisillä if- else - rakenteilla.

Tehtävä 10.105 switch - > if- goto

Kirjoita switch.c ohjelmanpätkä käyttäen if ja goto - rakenteita muuttamatta itse suoritettavia lauseita.

Tehtävä 10.106 Päävalinta

Kirjoita paavalinta käyttäen vain if ja else rakenteita.

Tehtävä 10.107 lääni, versio 2

Kirjoita laani- aliohjelma käyttäen switch- rakennetta.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys