Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys

10.11.1 break

Joskus kesken silmukan tulee vastaan tilanne, jossa silmukan suoritus haluttaisiin keskeyttää. Tällöin voidaan käyttää C- kielen break- lausetta, joka katkaisee sisimmän silmukan suorituksen.

c-silm\break.c - silmukan katkaisu keskeltä

	#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>");
	    scanf("%d",&luku);
	    if ( luku == 0 ) break;
	    summa += luku;
	  }
	  printf("Lukujen summa on %d.\n",summa);
	  return 0;
	}

Jos edellä olisi ollut alustus luku=1, olisi tietenkin while - silmukan ehto voitu kirjoittaa muodossa

	  while ( ( luku != 0 ) && ( summa <= 20 ) ) {

mutta aina ei voida break - lausetta korvata näin yksinkertaisesti. Esimerkiksi seuraava olisi jo hankalampi muuttaa:

c-silm\break2.cpp - esimerkki, jossa vaikea tulla toimen ilman breakiä

	  while ( summa <= 20 ) {
	    cout << "Anna luku>";
	    getline(cin,s);
	    if ( sscanf(s.c_str(),"%d",&luku) < 1 ) break;
	    if ( luku == 0 ) break;
	    summa += luku;
	  }

break - lauseen vika on lähinnä siinä, ettei siitä suoraan nähdä sisäkkäisten silmukoiden tapauksessa sitä, mihin saakka suoritus katkeaa. Epäselvissä tapauksissa silmukan katkaisu voidaan hoitaa goto - lauseella.

Silmukka voidaan katkaista tietenkin myös muuttamalla silmukan lopetusehtoon vaikuttavia muuttujia. Varsinkin for- lauseen tapauksessa silmukan indeksin arvon muuttaminen muualla kuin kasvatus- lauseessa on todella väkivaltaista ja rumaa, eikä tällaista pidä mennä tekemään.


Ylös Edellinen Seuraava Otsikkosivu Hakemisto Sisällys