3.2 L’istruzione do...while
Diversamente dall’istruzione while, che valuta la condizione prima di iniziare il ciclo iterativo,
l’istruzione do...while valuta la condizione alla fine del ciclo stesso:
è dunque un costrutto post-condizionale. Per questo motivo, il corpo del ciclo
viene eseguito almeno una volta, indipendentemente dal valore iniziale della condizione.
Sintassi

do {
istruzioni;
} while(condizione);
La sequenza di istruzioni compresa tra do e while viene ripetuta
tante volte finché la condizione rimane vera. La ripetizione termina quando la condizione diventa falsa.
Differenza rispetto al ciclo while
whilecontrolla la condizione all’inizio (pre-condizionale).do...whilecontrolla la condizione alla fine (post-condizionale).- Con
do...whileil corpo del ciclo è eseguito almeno una volta.
Esempio 1 – Stampa dei numeri da 10 a 20
int x = 9;
do {
x++;
cout << " " << x;
} while(x < 20);
// Output: 10 11 12 ... 20
Esempio 2 – Esecuzione garantita almeno una volta
int x = 50;
do {
x++;
cout << " " << x;
} while(x < 20);
// Output: 51
In questo caso il ciclo viene comunque eseguito una volta, anche se la condizione
x < 20 è già falsa all’inizio.
Esempio 3 – Validazione dell’input
int n;
do {
cout << "Inserire un valore intero compreso tra 10 e 20: "; cin >> n;
} while(n < 10 || n > 20);
cout << "Il numero inserito è " << n << endl;
Questo esempio mostra un tipico uso del ciclo do...while per
la validazione dell’input: la richiesta viene ripetuta finché l’utente non inserisce
un valore valido.
Esempio 4 – Calcolo della circonferenza con controllo sul raggio
int r;
float circ;
do {
cout << "Inserire la misura del raggio: "; cin >> r;
if(r < 0 || r > 32767)
cout << "Il valore del raggio deve essere positivo e minore di 32767" << endl;
} while(r < 0 || r > 32767);
circ = 2 * 3.14 * r;
cout << "Circonferenza = " << circ << endl;
Qui l’istruzione do...while consente di evitare una
inizializzazione fittizia (come r=-1 nel caso del while)
perché il blocco di input viene comunque eseguito almeno una volta.