Feladat - adatbekérés végjelig
Feladat: kérjünk be addig számokat, amíg egy speciális értéket (pl. 0-t) nem ír be a program kezelője. Döntsük el, hogy a beírt számok közül volt-e páros szám.
bool vege_e = false;
while (vege_e == false)
{
Console.Write("Kérek egy számot:");
int x = int.Parse( Console.ReadLine() );
if (x==0) vege_e = true;
else if (x%2==0) volt_paros = true;
}
if (volt_paros==true) Console.WriteLine("Volt páros szám");
else Console.WriteLine("Egyik szám sem volt páros szám");
A break utasítás
A fenti kis kódban a vegee változó szerepe, hogy vezérelje a ciklus működését. Értékét kezdetben false-ra állítjuk, jelezvén hogy még nincs vége a ciklus működésének. Amikor a vége jel megérkezik (nulla), akkor értékét true-ra billentjük. Ekkor a ciklus futása leáll.
Hasonló működést érhetünk el a break utasítás segítségével is. Ez a speciális, ciklusok esetén használható utasítás azonnal megszakítja a ciklus futását, és függetlenül a ciklus vezérlő feltétel értékétől, függetlenül minden mástól azonnal (erőszakosan) befejezi a ciklus futását. A program futása ettől nem szakad meg, folytatódik a ciklusra rákövetkező utasítás végrehajtásával.
while (true)
{
Console.Write("Kérek egy számot:");
int x = int.Parse( Console.ReadLine() );
if (x==0) break;
if (x%2==0) volt_paros = true;
}
if (volt_paros==true) Console.WriteLine("Volt páros szám");
else Console.WriteLine("Egyik szám sem volt páros szám");
Mivel a ciklusnak ez esetben nincs megfogalmazható vezérlő feltétele, így a while(true) módon egy végtelen ciklust indítunk. A ciklus tényleges kilépési feltétele a ciklus belsejében az if(x==0) módon került felírásra, a kilépésről a break gondoskodik.
Az ilyen ciklusokat szokás középen tesztelő ciklusnak nevezzük. Nem szép megoldás, ellentmond az algoritmus tárgyban hangsúlyozott struktúrált programozás elveinek - de egyes esetekben működőképesebb és áttekinthetőbb megoldáshoz juthatunk általa.
A continue utasítás
A break-hez hasonló utasítás a continue. Ennek használata esetén a ciklus futása nem szakad meg (fejeződik be) mint a break, sőt, ellenkezőleg. A continue hatására a ciklusmag maradék utasításai ebben a menetben már nem hajtódnak végre, de a ciklus futása folytatódik, mintha elértük volna a ciklusmagot lezáró kapcsos zárójelet, vagyis újra a vezérlő feltétel kiértékelése következik.
Console.WriteLine("Írj be pozitív számokat:");
while(true)
{
Console.Write("Kérek egy számot:");
int x = int.Parse( Console.ReadLine() );
if (x<0)
{
Console.WriteLine("Ez nem pozitív");
continue;
}
if (x%2==0) paros_db++;
}
if (paros_db>0) Console.WriteLine("Összesen {0} páros számot írtak be.");
else Console.WriteLine("Egyik szám sem volt páros szám");