Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

10.12 goto - lause

Lähes kaikissa ohjelmointikielissä on goto- lause, mutta usein strukturoidun ohjelmoinnin kannattajat ovat julistaneet sen pannaan. Julistus on aivan hyvä, sillä ainakin 90% tapauksista, joissa goto- lausetta tekisi mieli käyttää, voidaan korvata strukturoidummalla tavalla.

Seuraavissa tapauksissa goto- lause voidaan hyväksyä:

	1.  silmukan suorituksen katkaisu
	2.  aliohjelman loppuun hyppääminen (silloin kun returnia
	    ei lopetustoimenpiteiden vuoksi voida käyttää)
	3.  jos strukturoitu rakenne on selvästi monimutkaisempi

Mikäli yhteen aliohjelmaan tulee useita goto - lauseita, on rakenne selvästikin suunniteltu väärin, ja se on mietittävä uudelleen.

goto - lauseen syntaksiin kuuluu paikan nimi, johon hypätään. Tämä nimiö täytyy esitellä ohjelmassa laittamalla se tarvittavaan kohtaan:

c-silm\goto.c - hyppy ulos silmukasta

	#include <stdio.h>
	
	int main(void)
	{
	  int summa=0,luku;
	  printf("Anna lukuja.  Summaan niitä kunnes annat 0 tai summa > 20\n");
	  while (summa <= 20) {
	    printf("Anna luku>");
	    if ( !scanf("%d",&luku) ) goto luvut_loppu;
	    if ( luku == 0 ) goto luvut_loppu;
	    summa += luku;
	  }
	luvut_loppu:
	  printf("Lukujen summa on %d.\n",summa);
	  return 0;
	}

Siis break ja continue ovat "piilotettuja" goto- lauseita. Mikäli break tai continue pitäisi saada toimimaan 2 tasoa ulospäin, on pakko käyttää goto- lausetta.

Huom! Ensisijaisesti pyri välttämään goto- lauseita!

Tehtävä 10.104 Eri silmukoiden vertailu

Kirjoita lukujen alaraja-yläraja summausfunktio käyttäen
a) while -lausetta
b) do- while -lausetta
c) goto - lausetta
Muista, että alaraja saattaa olla suurempi kuin yläraja, eli summa väliltä [3,0] on 0!

Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys