Differenza tra il ciclo “while” e il ciclo “do while”

Qual è la differenza tra while loop e do while loop. Ero solito pensare che entrambi fossero completamente uguali. Poi ho trovato il seguente codice:

do { printf("Word length... "); scanf("%d", &wdlen); } while(wdlen<2); 

Questo codice funziona perfettamente. Stampa la lunghezza della parola e tascans l’input. Ma quando l’ho cambiato

 while(wdlen<2){ printf("Word length... "); scanf("%d", &wdlen); } 

Dà uno schermo vuoto. Io non lavoro. Quindi c’è una differenza funzionale tra i due cicli. Qualcuno può spiegarlo? Grazie in anticipo.

EDIT: C’è qualche altra differenza in questi due?

Il ciclo while esegue il contenuto del ciclo una volta prima di verificare la condizione del momento.

Mentre un ciclo while controllerà la condizione prima di eseguire il contenuto.

In questo caso, si sta aspettando l’input dell’utente con scanf (), che non verrà mai eseguito nel ciclo while dato che wdlen non è inizializzato e può contenere solo un valore spazzatura che può essere maggiore di 2.

Mentre : la condizione è all’inizio del blocco del ciclo e rende ansible non entrare mai nel ciclo .

Do While : la tua condizione si trova alla fine del blocco del ciclo e rende obbligatorio l’accesso al ciclo almeno una volta .

 do { printf("Word length... "); scanf("%d", &wdlen); } while(wdlen<2); 

Un ciclo do-while garantisce l'esecuzione del ciclo almeno una volta perché controlla la condizione del ciclo DOPO l'iterazione del ciclo. Pertanto stamperà la stringa e chiamerà scanf, aggiornando così la variabile wdlen.

 while(wdlen<2){ printf("Word length... "); scanf("%d", &wdlen); } 

Per quanto riguarda il ciclo while , valuta la condizione del loop PRIMA che il corpo del loop sia eseguito. wdlen probabilmente inizia con più di 2 nel codice, motivo per cui non si raggiunge mai il corpo del loop.

fare mentre si è in un ciclo di controllo di uscita. mentre è un ciclo di controllo delle entrate.

La differenza è quando la condizione viene valutata. In un ciclo do..while , la condizione non viene valutata fino alla fine di ogni ciclo. Ciò significa che un ciclo do..while verrà eseguito almeno una volta. In un ciclo while , la condizione viene valutata all’inizio.

Qui presumo che wdlen stia valutando false (cioè è più grande di 1) all’inizio del ciclo while , quindi il ciclo while non viene mai eseguito. Nel ciclo do..while , non viene controllato fino alla fine del primo ciclo, quindi ottieni il risultato che ti aspetti.

Il ciclo while verrà eseguito almeno una volta ……. ma il ciclo controllerà prima la condizione e quindi potrebbe essere eseguita a seconda della condizione.

Nell’esempio wdlen può assumere qualsiasi valore di garbage che è> 2, quindi il ciclo non verrà mai eseguito.

mentre do while loop verrà eseguito echip e ti dirà di inserire il valore e controllare quel valore in condizioni di terminazione

Mentre:

  1. ciclo di controllo di entrata

  2. la condizione viene controllata prima dell’esecuzione del ciclo

  3. mai eseguire il ciclo se la condizione è falsa

  4. non c’è un punto e virgola alla fine dell’istruzione while

Fare mentre:

  1. ciclo di controllo di uscita

  2. condizione viene controllata alla fine del ciclo

  3. esegue una condizione falsa almeno una volta poiché la condizione viene verificata in seguito

  4. c’è un punto e virgola alla fine dell’istruzione while.

Probabilmente wdlen inizia con un valore> = 2, quindi nel secondo caso la condizione del ciclo è inizialmente falsa e il ciclo non viene mai inserito.

Nel secondo caso il corpo del loop viene eseguito prima che la condizione wdlen<2 sia controllata per la prima volta, quindi printf / scanf viene eseguito almeno una volta.

Il ciclo while verrà eseguito almeno una volta ……. ma il ciclo controllerà prima la condizione e quindi potrebbe essere eseguita a seconda della condizione. Mentre: la condizione è all’inizio del blocco del ciclo e rende ansible non entrare mai nel ciclo.

Do While: la tua condizione si trova alla fine del blocco del ciclo e rende obbligatorio l’accesso al ciclo almeno una volta.

mentre testare la condizione prima di eseguire istruzioni all’interno del ciclo while .

fare mentre testare la condizione dopo aver eseguito l’ istruzione all’interno del ciclo.

fonte: facci C

mentre testare la condizione prima di eseguire istruzioni nel ciclo while.

fare mentre testare la condizione dopo aver eseguito la dichiarazione all’interno del ciclo.

In WHILE controllare prima la condizione e quindi eseguire il programma Nel ciclo DO-WHILE eseguire prima il programma almeno una volta quindi controllare la condizione

La differenza tra fare while (exit check) e while (entry check) è che mentre si entra in do mentre non si controlla ma in mentre per prima cosa controlla

L’esempio è come tale:

Programma 1:

 int a=10; do{ System.out.println(a); } while(a<10); //here the a is not less than 10 then also it will execute once as it will execute do while exiting it checks that a is not less than 10 so it will exit the loop 

Programma 2:

 int b=0; while(b<10) { System.out.println(b); } //here nothing will be printed as the value of b is not less than 10 and it will not let enter the loop and will exit 

uscita Programma 1:

10

uscita Programma 2:

[niente è stampato]

Nota:

l'output del programma 1 e del programma 2 sarà lo stesso se assegniamo a = 0 eb = 0 e mettiamo anche un ++; e b ++; nel rispettivo corpo del programma.

While Loop:

 while(test-condition) { statements; increment/decrement; } 
  1. Tempo di esecuzione e velocità inferiori
  2. Loop in entrata
  3. Nessun numero fisso di iterazioni

Do While Loop:

 do { statements; increment/decrement; }while(test-condition); 
  1. Maggiore tempo di esecuzione e velocità
  2. Esci da Loop condizionato
  3. Un numero minimo di iterazioni

Scopri di più su questo argomento qui: Differenza tra While e Do While Loop

Ciò è valido anche per la programmazione C, la programmazione Java e altri linguaggi poiché i concetti rimangono gli stessi, solo le modifiche alla syntax.

Inoltre, un altro piccolo ma un fattore di differenziazione da notare è che il ciclo do while consiste in un punto e virgola alla fine della condizione while.

La differenza tra i costrutti while del Passaggio 1 rispetto a un do while è che qualsiasi espressione all’interno di do {} verrà eseguita almeno una volta indipendentemente dalla condizione all’interno della clausola while() .

 println("\nStep 2: How to use do while loop in Scala") var numberOfDonutsBaked = 0 do { numberOfDonutsBaked += 1 println(s"Number of donuts baked = $numberOfDonutsBaked") } while (numberOfDonutsBaked < 5) 

Ecco una spiegazione dettagliata: Spiegazione Visita: coderforevers

 while(wdlen<2){ ... } 

Se wdlen (supponendo che si tratti di una variabile di stack) non è inizializzato o assegnato un valore prima che venga inserito il ciclo while, conterrà qualsiasi cosa fosse in quello spazio in memoria (cioè spazzatura). Quindi se il valore della spazzatura è <2, il ciclo viene eseguito, altrimenti non lo fa.

 do{ ... }while(wdlen<2) 

verrà eseguito una volta e quindi verificherà le condizioni per eseguire nuovamente il ciclo, e questa volta potrebbe riuscire se per caso wdlen, che non è inizializzato, risulta inferiore a 2.