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.