2010-09-02 15 views
25

¿Cuál es la diferencia entre while loop y do while loop? Solía ​​pensar que ambos son completamente iguales. Luego me encontré con el siguiente código:Diferencia entre el bucle "while" y el bucle "do while"

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

Este código funciona perfectamente. Imprime la longitud de la palabra y evalúa la entrada. Pero cuando lo cambié a

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

Da una pantalla en blanco. No funciona. Entonces hay alguna diferencia funcional entre ambos bucles. ¿Alguien puede explicarlo? Gracias por adelantado.

EDITAR: ¿Hay alguna otra diferencia en estos dos?

+0

bucle while comprueba la condición inicialmente y luego ejecuta .. pero se puede hacer mientras se ejecuta el cuerpo al menos una vez, incluso si la condición es falsa .. Tanto –

+0

están igualmente rotos porque ninguno de ellos verifica el valor de retorno de 'scanf()'. –

Respuesta

48

hacer mientras que el lazo ejecuta el contenido del bucle una vez antes de verificar el estado del tiempo.

Mientras que while loop verificará primero la condición antes de ejecutar el contenido.

En este caso usted está esperando la entrada del usuario con scanf(), que nunca se ejecutará en el bucle mientras como wdlen no se ha inicializado y sólo puede contener un valor de basura que puede ser mayor que 2.

+0

"wdlen (supuestamente comienza en 0) y nunca será <2" - de vuelta en mi clase de matemática Me enseñaron que 0 <2 ;-) –

+0

0 <2 == ¿falso? ¿Estás seguro? – Joost

+0

¡Pero seguramente '0 <2'! – James

13

Mientras: su condición está en el comienzo del bloque de bucle, y hace posible para nunca ingresar al bucle.

Hacer mientras: su condición es al final del bloque de bucle, y hace obligatoria para entrar en el bucle al menos una vez.

+0

tnx para una buena reproducción. ¿Hay una sola diferencia? ¿Hay alguna otra diferencia? ?? – AminM

+0

@AminM Este último requiere dos caracteres adicionales para escribir. –

0

Probablemente wdlen comienza con un valor> = 2, por lo que en el segundo caso la condición de bucle es inicialmente falsa y el bucle nunca se ingresa.

En el segundo caso, el cuerpo del bucle se ejecuta antes de comprobar la condición wdlen<2 por primera vez, por lo que el printf/scanf se ejecuta al menos una vez.

+0

Más grande que 2, supongo que te refieres? – Stephen

+0

@Stephen: sí, cambió eso :) – sth

+0

Heh, bien atrapado. Tu cambio realmente me hizo detectar un error en mi respuesta (¡había dicho "debe ser mayor a 2"!), Así que ¡salud!). – Stephen

1

La diferencia está en cuando se evalúa la condición. En un ciclo do..while, la condición no se evalúa hasta el final de cada ciclo. Eso significa que un bucle do..whilesiempre se ejecutará al menos una vez. En un bucle while, la condición se evalúa al inicio.

Supongo que wdlen está evaluando a falso (es decir, es más grande que 1) al principio del bucle while, por lo que el bucle while nunca se ejecuta. En el ciclo do..while, no se verifica hasta el final del primer ciclo, por lo que se obtiene el resultado esperado.

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

Un bucle do-while garantiza la ejecución del bucle al menos una vez, ya que verifica la condición de bucle DESPUÉS de la iteración del bucle. Por lo tanto, imprimirá la cadena y llamará a scanf, actualizando así la variable wdlen.

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

Como para el bucle while, se evalúa la condición de bucle antes de ejecutar el cuerpo del bucle. wdlen probablemente comienza como más de 2 en tu código, por eso nunca llegas al cuerpo del bucle.

+0

"probablemente comienza menos de 2" ... 'while (wdlen <2)' ... ¿oops? – Stephen

+0

Vaya, amigo. – Mahmoud

1

hacer mientras bucle se ejecutará al menos una vez ....... pero mientras bucle se compruebe la condición primera y luego se puede o no se ejecutan dependiendo de la condición.

En su ejemplo, wdlen puede asumir cualquier valor de basura que sea> 2 por lo que mientras que el bucle nunca se ejecutará.

mientras que hacer mientras bucle se ececuted y le dirá u para introducir el valor y comprobar que el valor de condición de terminación

-1
while(wdlen<2){ 
    ... 
} 

Si wdlen (asumiendo que es una variable de pila) no está inicializado o asignado una valor antes de que se ingrese el ciclo while, contendrá todo lo que haya en ese espacio en la memoria anterior (es decir, basura). Entonces, si el valor de la basura es < 2, el bucle se ejecuta, de lo contrario no lo hace.

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

se ejecutará una vez y luego comprueba la condición de bucle para ejecutar de nuevo, y esta vez podría tener éxito si por casualidad wdlen que es inicializado se encuentra que es inferior a 2.

2

hacer, mientras que en una salida bucle de control. mientras que es un bucle de control de entrada.

0

Do while loop se ejecutará al menos una vez ....... pero while loop verificará primero la condición y luego puede o no ejecutarse dependiendo de la condición. Mientras: su condición está al comienzo del bloque de bucle, y hace que nunca ingrese el bucle.

Do While: su condición se encuentra al final del bloque de bucle, y hace obligatorio ingresar al bucle al menos una vez.

1

bien:

  1. bucle de control de entrada

  2. condición se comprueba antes de la ejecución del bucle

  3. nunca se ejecutará en bucle si la condición es falsa

  4. no hay punto y coma al final de la declaración while

do-while:

  1. bucle de control de salida

  2. condición se comprueba al final del bucle

  3. ejecuta falsa condición al menos una vez desde condición es verificada más tarde

  4. hay punto y coma al final de la instrucción while.

0

mientras prueba de la condición antes de ejecutar declaraciones dentro del bucle mientras.

hacer mientras prueba de la condición después de haber ejecutado comunicado dentro del bucle.

fuente: nos sea C

+2

Esta pregunta tiene 3 años y ya tiene una respuesta ... +1 por ser un héroe. –

0

mientras que probar la condición antes declaraciones ejecutoras en el bucle while.

hacer mientras prueba la condición después de haber ejecutado la instrucción dentro del ciclo.

+1

No te equivocas, ¿pero es posible que sea un poco tarde para responder a esto? –

+0

puede ser que sea tarde, pero quería responder a su pregunta con una respuesta simple/breve –

0

En WHILE primera comprobar el estado y luego ejecutar el programa En bucle do-while primero ejecutar el programa al menos una vez a continuación, comprobar la condición

+2

6 años tarde. Ya hubo 12 respuestas a la pregunta. –

0

La diferencia entre do while (control de salida) y mientras (entrada visita) es que al entrar en hacer mientras que no se compruebe pero en mientras que primero se compruebe

El ejemplo es como tal:

Programa 1:

Programa
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 

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 

salida Programa 1:

salida Programa 2:

[nada se imprime]

nota:

salida del programa 1 y programa 2 será el mismo si asignamos a = 0 y b = 0 y también poner a ++; y b ++; en el cuerpo respectivo del programa.

0

Mientras Loop:

while(test-condition) 
{ 
     statements; 
     increment/decrement; 
} 
  1. Bajo Tiempo de ejecución y velocidad
  2. Entrada acondicionado Loop
  3. No hay un número fijo de iteraciones

Do While Loop:

do 
{ 
     statements; 
     increment/decrement; 
}while(test-condition); 
  1. mayor tiempo de ejecución y velocidad
  2. salida acondicionado Loop
  3. Mínimo un número de iteración

Para saber más sobre este tema aquí: Difference Between While and Do While Loop

Este es válido para programación C, programación Java y otros lenguajes a s bien porque los conceptos son los mismos, solo cambia la sintaxis.

También, otro pequeño pero un factor diferenciador a tener en cuenta es que el ciclo do while consiste en un punto y coma al final de la condición while.

0

la diferencia entre un while construcciones de la Etapa 1 en comparación con un do while es que cualquier expresiones dentro del do {} va a correr al menos una vez independientemente de la condición dentro de la cláusula 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) 

Aquí está el detalle explicación: Explanation visita: coderforevers