Esistono usi e applicazioni reali per cicli "do while"? [chiuso]

6

Quando vedo for e while loop su tutti i codici di produzione e sui progetti mastodontici, l'ultima volta che ho visto un ciclo do while è per un'assegnazione universitaria che coinvolge un programma di input da console basato su menu. Circa 50 righe al massimo,

Hai visto applicazioni reali del costrutto del ciclo do while ? In che modo un simile costrutto, nel tuo esempio, è vantaggioso rispetto a for o while loops o a qualsiasi altro costrutto?

Nota: non sto cercando scenari ipotetici, ma utilizzo effettivo applicato nel settore commerciale.

    
posta ADTC 06.01.2015 - 04:50
fonte

5 risposte

16

Applicazione reale, lettura dei dati da un file in blocchi fino alla fine del file:

do
    result = readData(buffer)
while result != EOF

Senza do-while devi fare qualcosa di simile

result = 0   # magic value that must not be EOF
while result != EOF
    result = readData(buffer)

o

while true
    result = readData(buffer)
    if result == EOF
        break

Entrambi sono più brutti secondo me.

Quando per lo più eseguivo la programmazione in C ++, usavo sempre do-while , in applicazioni di spedizione reali.

    
risposta data 06.01.2015 - 05:28
fonte
22

Usa do while ogni volta che vuoi che il ciclo venga sempre eseguito almeno una volta.

Un tipico esempio di tale utilizzo è un interprete della riga di comando; il prompt della riga di comando verrà sempre visualizzato almeno una volta.

    
risposta data 06.01.2015 - 05:02
fonte
3
    int counter = 0;
    do {
        s = Formatter.formatWorkerId(counter++);
    } while(all.contains(s));

Trova l'ID lavoratore più sintatticamente corretto che non sia già presente in un set. (I miei usi di do tendono ad essere confinati a quel tipo di problema, in cui devi sicuramente generare un valore, ma il primo test potrebbe già avere successo.)

    
risposta data 06.01.2015 - 08:22
fonte
2

@ La risposta di RobertHarvey è d'oro, ma darò una svolta divertente a "do ... while" e "while ... do"

Nel linguaggio di programmazione Forth, il looping è stato effettivamente suddiviso in questo modo (evocando uno pseudocodice basato sul codice Forth da anni, oserei dire decenni, fa)

{
  a()
  }
 loop (expr())
{
  b()
  }

... così che a () è stato garantito l'esecuzione almeno una volta, quindi l'espressione è stata testata, e se era vera, eseguire b () e quindi tornare a a ().

Il risultato è, se non hai le informazioni necessarie per decidere se eseguire il ciclo, allora do...while può essere davvero utile.

Il (goffo) work-around è qualcosa come

a = null
while (a == null)
  a = something()

... fa la stessa cosa, ma quell'iniziale a = null lascia sempre un sapore aspro in bocca.

    
risposta data 06.01.2015 - 05:14
fonte
2

Mi piace usare do while loop per le macro pre-processore in C / C ++ senza il finale ; . Se dimentico il ; , il compilatore si fermerà con un errore.

Esempio:

#define expr(a) do { /* do something with a */ } while(false)

Nota il ; mancante alla fine della riga. Nel tuo codice, devi scrivere

expr(a);

con un punto e virgola. Altrimenti la compilazione fallirà.

    
risposta data 06.01.2015 - 14:23
fonte

Leggi altre domande sui tag