La domanda è: quando servono?
Servono quando l'espressione logica deve venire utilizzata, per qualche motivo, anche all'interno del ciclo.
Per esempio:
- Codice: Seleziona tutto
do
{
flag = una_operazione_a_piacere();
// ...
if (flag) { // Fa qualcosa che può modificarmi il valore di flag }
} while(flag);
Un altro caso in cui si usano le varibili di flag è quando bisogna evitare il cortocircuito delle valutazioni delle espressioni logiche. Es:
Siano
- Codice: Seleziona tutto
char a(void) { ... }
char b(void) {...}
char c(int n) {...}
Tre funzioni che ritornano un valore da interpretare come vero o falso.
E sia
- Codice: Seleziona tutto
(a() && b() && c(4))
la condizione di permanenza in un ciclo do-while.
Se io uso un flag calcolando il risultato in questo modo
- Codice: Seleziona tutto
flag = a();
flag = flag && b();
flag = flag && c(4);
Sono sicuro che, oltre ad aver calcolato il valore dell'espressione logica, le tre funzioni a,b,c sono state eseguite.
Mentre se scrivo
- Codice: Seleziona tutto
do
{
//..
} while (a() && b() && c(4))
Se la chiamata alla funzione "a" ritorna un valore di falso, il compilatore (o l'ottimizzatore) evita di chiamare le altre due funzioni perché essendo un'operazione di and basta che il primo risultato, o comunque uno solo dei tre, sia falso che tutta l'espressione dia come risultato falso. Quindi è inutile chiamare le altre due funzioni.
Tradotto: non ho la sicurezza che tutte e tre le funzioni vengano comunque eseguite.
Come già detto giustamente in altri interventi prima di questo, la differenza fra il ciclo while ed il do-while è che nel while la condizione controlla sia l'ingresso che la permanenza nel ciclo, mentre ne do-while controlla la sola permanenza nel ciclo.
Il risultato è che il do-while viene almeno eseguito una volta (manca la condizione di ingresso) mentre il while può anche non essere eseguito mai (dovuto alla condizione che controlla anche l'ingresso).

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





