Ciklusok - a do...while
A do ... while ciklus a while ciklushoz hasonlóan egy műveletek megismétlésére használt vezérlési szerkezet. Annyiban különbözik a sima while ciklustól, hogy míg a while a ciklusmag lefuttatása előtt ellenőrzi le hogy teljesült-e a feltétel, addig a do...while a ciklus belsejének futtatása után végzi el az ellenőrzést, azaz a ciklus belseje minimum egy alkalommal biztosan le fog futni akkor is, ha a feltétel egyébként az első futás előtt nem teljesülne. Ezt a vezérlési szerkezetet hátul tesztelő ciklusnak nevezzük.
Hátul tesztelő ciklussal általában ritkábban találkozunk, mint az elöl tesztelő, vagy a számlálásos ciklussal, azonban ha megértjük a működését, akkor bizonyos helyzetekben kényelmes lehet. Az alábbi példában például do... while segítségével kockadobásokat szimulálunk addig, ameddig egy 6-ost nem dobunk:
Random rnd = new Random();
int dobas;
do {
dobas = rnd.Next(1,7);
Console.WriteLine(dobas);
} while (dobas != 6)
Console.WriteLine("Vége!");
[
{ "steps": [0], "variables": [ {"name":"rnd","value":"Véletlen generátor"} ], "hint": "Létrehozunk egy új véletlenszám generátort."},
{ "steps": [1], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":""} ], "hint": "Létrehozunk egy új változót dobas néven."},
{ "steps": [2], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":""} ], "hint": "A ciklus első alkalommal mindenképp lefut."},
{ "steps": [3], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"5"} ], "hint": "A dobas változóba új véletlen számot generálunk 1 és 6 között."},
{ "steps": [4], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"5"} ], "hint": "A generált számot (5) kiírjuk a konzolra.", "console":"5"},
{ "steps": [5], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"5"} ], "hint": "Ellenőrizzük a feltételt. A dobas értéke nem 6, így a ciklus ismét lefut.", "console":"5"},
{ "steps": [3], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"3"} ], "hint": "A dobas változóba új véletlen számot generálunk 1 és 6 között.", "console":"5"},
{ "steps": [4], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"3"} ], "hint": "A generált számot (3) kiírjuk a konzolra.", "console":"5\n3"},
{ "steps": [5], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"3"} ], "hint": "Ellenőrizzük a feltételt. A dobas értéke nem 6, így a ciklus ismét lefut.", "console":"5\n3"},
{ "steps": [3], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"6"} ], "hint": "A dobas változóba új véletlen számot generálunk 1 és 6 között.", "console":"5\n3"},
{ "steps": [4], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"6"} ], "hint": "A generált számot (6) kiírjuk a konzolra.", "console":"5\n3\n6"},
{ "steps": [5], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"6"} ], "hint": "Ellenőrizzük a feltételt. A dobas értéke 6, így a ciklusnak vége.", "console":"5\n3\n6"},
{ "steps": [6], "variables": [ {"name":"rnd","value":"Véletlen generátor"}, {"name":"dobas","value":"6"} ], "hint": "Kiírjuk a Vége! feliratot a konzolra.", "console":"5\n3\n6\nVége!"}
]
Mintakód
Készítsünk tippelgetős játékot. A játék megjelenít egy kérdést, majd bekér rá egy választ. Ha a válasz hibás, újra bekér egy választ, és ismétli mindezt addig, ameddig a helyes választ be nem írjuk.
Console.WriteLine("Fekete apró erdei gyümölcs. Mi az?");
string valasz;
do {
Console.Write("Válaszod: ");
valasz = Console.ReadLine();
} while( valasz != "ribizli");
Coonsole.WriteLine("Helyes!");
A feladat megoldásához azért használtuk a hátul tesztelő ciklust, mert legalább egy alkalommal biztosan be kell kérnem választ a felhasználótól, így előnyös egy olyan ciklus, aminek a tartalma legalább egyszer mindenképp lefut a feltétel ellenőrzése előtt.