Silmukan do..while yleinen muoto on
do lause while (ehto);
tai, jos lause korvataan lohkolla:
do {
lause1;
lause2;
...
} while (ehto);
Tämä silmukka aloitetaan suorittamalla ensin lause (lohko). Sitten lasketaan ehto-lausekkeen arvo; jos tulos on tosi (nollasta poikkeava), suoritetaan lause (lohko) uudelleen ja lasketaan jälleen ehto, jne. Sitten kun ehdon tulos on epätosi (nolla), silmukan suoritus päättyy.
Lause do..while eroaa while-lauseesta vain sikäli, että nyt lause (tai lohko) suoritetaan aina vähintään kerran, kun taas while:a käytettäessä on mahdollista, että toistettavaa toimenpidettä ei tehdä kertaakaan. Se, kumpaa silmukkaa kannattaa käyttää, täytyy päättää tapauskohtaisesti.
Edellinen esimerkki do..while-silmukan avulla tehtynä näyttää seuraavalta:
/* *********************************************************
COOPER3.CPP
Kuten COOPER2.CPP, mutta käytetään do..while -silmukkaa
syöttötietojen tarkistamisessa.
********************************************************* */
#include <iostream.h>
#define RADAN_PITUUS 400
#define MAKSIMI 6000
#define MINIMI 100
void tulosta_esittely(void)
{
cout << "\n\n";
cout << "Cooperin testi\n" << endl;
}
void kysy_matka(int &matka)
{
/* toistetaan kunnes annettu matka on järkevä */
do {
cout << "Anna juoksemasi matka metreinä (";
cout << MINIMI << "-" << MAKSIMI << ") > ";
cin >> matka;
} while (matka < MINIMI || matka > MAKSIMI);
}
int laske_kierrokset(int &matka)
{
int kierrokset = 0;
while (matka >= RADAN_PITUUS) {
matka = matka - RADAN_PITUUS;
kierrokset++;
}
return kierrokset;
}
void tulosta_kierrokset(int kierrokset, int loppumatka)
{
cout << "\n";
cout << "Juoksit " << kierrokset << " kierrosta ";
cout << "ja lisäksi " << loppumatka << " metriä." << endl;
}
int main(void)
{
int matka;
int kierros_lkm;
tulosta_esittely();
kysy_matka(matka);
kierros_lkm = laske_kierrokset(matka);
tulosta_kierrokset(kierros_lkm, matka);
return 0;
}
Esimerkkiajo:
Cooperin testi Anna juoksemasi matka metreinä (100-6000) > 25 Anna juoksemasi matka metreinä (100-6000) > 7500 Anna juoksemasi matka metreinä (100-6000) > 3800 Juoksit 9 kierrosta ja lisäksi 200 metriä.
Cooper-ohjelmassa radan pituus on vakiona. Muuta se muuttujaksi, jonka arvon käyttäjä antaa.