next up previous contents
Elõre: Egyéb vezérlésátadó utasítások Fel: Utasítások Vissza: A feltételes utasítás

Ciklusszervezõ utasítások

Elöltesztelt, feltételvezérelt ciklusok szervezésére szolgál a while utasítás, alakja:

        while (kifejezés) utasítás vagy blokk

A fenti ciklusba lépve a kifejezés kiértékelésre kerül, és ha értéke 0, akkor a ciklus törzsére nem adódik egyszer sem a vezérlés. Ha a kifejezés igaz, akkor végrehajtásra kerül az utasítás vagy blokk, majd újra a kifejezés kiértékelése következik, stb. A ciklusból tehát mindaddig nem jutunk ki, amíg a ciklusfeltétel hamis nem lesz. A pelda.c program fõ ciklusa is a while szerkezettel lett megoldva:

            while ((c = getchar()) != EOF)
            {
                     ciklustörzs
            } /* endw */
A ciklusban maradás feltétele itt az, hogy a terminálról beolvasott, és a c változóban tárolt érték ne a file-vége jel legyen. A fenti séma karakteres file-olvasásnál mindennapos a C-ben. Vegyük észre azt is, hogy ha a file nem tartalmaz (vagy a terminál nem küld) egyetlen karaktert sem, akkor a programunk illõen nem csinál semmit. Gyakran elõfordul, hogy a ciklus feltételrészében minden tennivalót elvégzünk, és a ciklus törzse üresen marad, például:
            while ((c = str[i++]) == ' ')
             ;
Induláskor az str karakterlánc i-edik elemén állunk, és a ciklus végére c felveszi a sztring soron következõ, nem szóköz karakterét, i pedig a karakterlánc rákövetkezõ elemének indexét tartalmazza.

Hátultesztelt, feltételvezérelt ciklusokat a következõ formában írhatunk:

        do utasítás vagy blokk while( kifejezés);

Az adott utasítás vagy blokk végrehajtása mindaddig ciklikusan ismétlõdik, amíg a ciklusfeltételt jelentõ kifejezés igaz (nem 0) marad. Akkor célszerû a használata, ha a ciklustörzset legalább egyszer mindenképpen végre kell hajtani.

Más nyelvekhez hasonlóan elsõsorban a for utasítás szolgál arra, hogy számlálóvezérelt ciklusokat készítsünk; ugyanakkor a C nyelv for ciklusa jóval kötetlenebb. Általános alakja:

        for (inicializáló_kifejezés;

             feltétel_kifejezés;

             léptetõ_kifejezés)  utasítás vagy blokk

A ciklusba lépve kiértékelõdik az inicializáló_kifejezés, ami valamilyen mellékhatáson keresztül inicializáló szerepet tölt be. Ezután a feltétel_kifejezés értékét határozza meg a gép, és ha értéke hamis (0), akkor elhagyjuk a ciklust. Egyébként végrehajtásra kerül a ciklus törzsét alkotó utasítás vagy blokk, majd a léptetõ_kifejezés értékének meghatározására kerül sor (ez egy mellékhatás révén a ciklusban történõ léptetést vezérelheti), majd visszatérünk a ciklusfejben lévõ feltétel_kifejezés kiértékelésére, és a ciklus mindaddig folytatódik, amíg feltétel_fifejezés hamis nem lesz. A fentiek alapján látható, hogy a for a while egy olyan kiterjesztéseként is felfogható, ahol a ciklus elõtti inicializáló és a ciklustörzs legvégén szereplõ léptetõ kifejezés-utasításokat egy helyre, a ciklusfejbe összevonjuk. Elsõ példaként nézzünk meg egy, a hagyományos for-nak megfelelõ számlálóvezérelt ciklust:

            for (i = 0; i < dbszam; i++)
            {
               ....

            } /* endfor */
A fenti ciklus a törzsét dbszam-szor hajtja végre, illetve ha dbszam <= 0, akkor egyszer sem (azaz ez a változat is kicsit intelligensebb a hagyományos for utasításoknál).

A következõ példa megkeresi a float vektor[N] tömbben az elsõ negatív elemet:

            for (i = 0; i < N && vektor[i] >= 0; i++)
            ;
Ha kilépéskor i értéke N, akkor minden elem nemnegatív, egyébként i a kérdéses elem indexe. A for ciklus fejében lévõ kifejezések közül bármelyik el is maradhat. Ha a feltétel_kifejezés-t hagyjuk el, akkor az állandó igazat jelent. A
            for (;;)
            {
              ...
            } /* endfor */
alakú ciklus a végtelen ciklus, kilépés belõle csak egyéb vezérlõutasításokkal lehetséges. (Egy másik lehetõség a végtelen ciklus létrehozására a while(1) {...} szerkezetû ciklus.)


next up previous contents
Elõre: Egyéb vezérlésátadó utasítások Fel: Utasítások Vissza: A feltételes utasítás