A do – while ciklus a sima while ciklus párja. Ez a ciklus nem a ciklusmag lefutása elÅ‘tt nézi meg az ismétlési feltételt, hanem a ciklusmag végrehajtása után. Tehát egyszer mindenképpen végrehajtódik a ciklusmagban tárolt utasÃtássorozat. A szintaxisa a következÅ‘:
do
{
//ciklusmag
}
while ( feltétel );
Tipikusan olyan esetben használjuk, mikor legalább egyszer le kell futtatnunk a műveletsort. Ilyen lehet például egy ellenőrzött adatbekérés a felhasználótól. Erre a célra kiválóan alkalmas ez a vezérlési szerkezet, mivel legalább egyszer be kell kérnünk az adatot és előre nem tudjuk megmondani, hogy hányszor fogja a bevitelt elrontani véletlenül a felhasználó. Az alábbi példa ennek az alkalmazását mutatja be:
using System;
namespace PeldaDowhile
{
class Program
{
static void Main(string[] args)
{
int szam = -1;
do
{
try
{
Console.WriteLine("Adjon meg egy 1 és 10 közötti páros számot!");
string szoveg = Console.ReadLine();
szam = Convert.ToInt32(szoveg);
}
catch (Exception)
{
szam = -1;
}
}
while ((szam < 1) || (szam > 10) || ((szam % 2) != 0));
Console.WriteLine("A megadott szám: {0}", szam);
Console.ReadKey();
}
}
}
A program kimenete valami hasonló lesz:
Adjon meg egy 1 és 10 közötti páros számot!
1
Adjon meg egy 1 és 10 közötti páros számot!
3
Adjon meg egy 1 és 10 közötti páros számot!
8
A megadott szám: 8
A ciklus használatánál nehézséget okozhat, hogy a ciklusban maradás feltételét kell megadni, nem pedig az abból való kilépését, ezért van lényegében minden feltétel negálva a while utasÃtásban. A feltételek negálásánál érdemes megemlÃteni a boole algebra egyik alaptételét, a de Morgan azonosságokat. Eszerint egy összetett logikai feltétel tagadásakor nem csak az egyes feltételeket kell tagadni, hanem a köztük lévÅ‘ műveleteket is. Ez azt jelenti, hogy az ÉS kapcsolatot VAGY kapcsolatra kell cserélni és fordÃtva. Az alábbi példa kód ezt mutatja be:
if ( x > 10 && ((x % 3) == 0)) darab++;
A feltétel negálása:
if ((x < 10) || ((x % 3) != 0)) darab++;