Ciclo Do While in Linguaggio C
L'istruzione do
while
permette di realizzare cicli in cui il corpo del ciclo stesso venga eseguita almeno una volta.
La sintassi dell'istruzione do
while
, infatti, prevede due parti: il corpo del ciclo e la condizione di controllo. Il corpo viene eseguito prima della verifica della condizione per cui un ciclo do
while
garantisce che il corpo venga sempre eseguito almeno una volta.
In questa lezione vedremo come usare un ciclo do
while
, qual è la sua sintassi e quali sono le differenze rispetto ad un normale ciclo while
.
- Usando l'istruzione
do
while
è possibile realizzare cicli in cui la condizione viene valutata alla fine del corpo del ciclo; - In questo modo il corpo del ciclo viene eseguito sempre almeno una volta.
Istruzione do
while
L'istruzione do
while
è strettamente correlata all'istruzione while
. Infatti, si può affermare che l'istruzione do
consiste essenzialmente in un'istruzione while
la cui espressione di controllo viene valutata dopo ogni esecuzione del corpo del ciclo.
La forma dell'istruzione do
while
è la seguente:
do istruzione while ( espressione );
L'espressione di controllo dell'istruzione do
while
deve essere racchiusa tra parentesi. Inoltre, come per il caso dell'istruzione while
, il corpo dell'istruzione do
while
può essere un'unica istruzione oppure un'istruzione composta:
do {
istruzione_1;
istruzione_2;
/* ... */
istruzione_n;
} while ( espressione );
Quando viene eseguita un'istruzione do
while
, viene eseguito dapprima il corpo del ciclo quindi, successivamente, viene controllata l'espressione di controllo. Se il valore dell'espressione di controllo è diverso da zero, quindi l'espressione risulta vera, il corpo del ciclo viene eseguito di nuovo e l'espressione viene controllata ancora. L'esecuzione di un'istruzione do
termina quando l'espressione ha valore pari a zero, quindi falsa, dopo che il corpo del ciclo è stato eseguito.
Per chiarire meglio la differenza tra un'istruzione do
ed un'istruzione while
conviene ritornare all'esempio fatto nella lezione sull'istruzione while
: la stampa di un conto alla rovescia.
Nella lezione sull'istruzione while
abbiamo implementato un programma che stampa un conto alla rovescia partendo da 10, in questo modo:
#include <stdio.h>
int main() {
int n = 10;
while (n > 0) {
printf("%d\n", n);
n--;
}
printf("Partenza!\n");
return 0;
}
Volendo scrivere lo stesso programma utilizzando l'istruzione do
while
possiamo implementarlo in questo modo:
#include <stdio.h>
int main() {
int n;
n = 10;
do {
printf("%d\n", n);
--n;
} while (n > 0);
printf("Partenza!\n");
return 0;
}
Andando ad esaminare il comportamento di questo programma vediamo che:
- Quando l'istruzione
do
viene eseguita, viene eseguito dapprima il corpo del ciclo. Per tal motivo viene stampato dapprima il numero e poi decrementata la variabilen
. A questo punton
vale 9; - Successivamente viene testata la condizione
n > 0
che risulta vera in quanton
vale 9; - Il corpo del ciclo viene, quindi, eseguito una seconda volta;
- Il corpo del ciclo verrà eseguito tante volte finché non viene stampato il messaggio
1
e la variabilen
decrementata ad assumere il valore 0; - A questo punto la condizione viene valutata e risulta falsa e il ciclo termina.
Come possiamo vedere, spesso un ciclo while
ed un ciclo do
while
sono indistinguibili. La vera differenza sta nel fatto che la condizione viene valutata dopo l'esecuzione del corpo del ciclo. Questa caratteristica ha un'importante conseguenza:
Il corpo di un ciclo do
while
viene eseguito sempre almeno una volta.
A differenza di un ciclo while
, il corpo di un ciclo do
while
viene eseguito prima della valutazione dell'espressione di controllo. Per tal motivo, anche se l'espressione di controllo risulta falsa prima ancora dell'avvio del ciclo, il corpo di un ciclo do
while
viene eseguito sempre almeno una volta.
Questa è una differenza cruciale rispetto al ciclo while
in cui il corpo potrebbe non essere eseguito nemmeno una volta.
Una buona norma di programmazione è quella di adoperare comunque le parentesi per racchiudere il corpo di un ciclo do
while
anche se non sono necessarie. Questo perché codici come il seguente possono trarre in inganno un lettore poco attento:
do
n = n / 2;
while (n > 0);
Ad una lettura poco attenta, infatti, il while alla terza riga potrebbe sembrare l'inizio di un'istruzione while
.
Conviene sempre racchiudere il corpo di un ciclo do
tra parentesi.
Per migliorare la leggibilità del codice conviene sempre racchiudere il corpo del ciclo do
tra parentesi.
Quindi bisogna di evitare di scrivere codice in questo modo:
do
istruzione;
while (condizione);
Invece conviene scrivere in questo modo:
do {
istruzione;
} while (condizione);
In Sintesi
In questa lezione abbiamo studiato la seconda istruzione messa a disposizione dal linguaggio C per la realizzazione di cicli: l'istruzione do
while
.
A differenza dell'istruzione while
, con l'istruzione do
while
l'espressione di controllo che determina l'esecuzione della prossima iterazione viene valutata dopo il corpo del ciclo stesso. Questo garantisce che il corpo del ciclo venga sempre eseguito almeno una volta.
Nella prossima lezione studieremo l'istruzione for
che consente di realizzare cicli in maniera estremamente flessibile.