¿Es posible tener un bucle while en c ++ que haga la comprobación en el medio del bucle en lugar del principio o el final?

StackOverflow https://stackoverflow.com/questions/1807110

Pregunta

Quiero que un bucle while haga algo como lo siguiente, pero ¿es esto posible en c ++? Si es así, ¿cómo va la sintaxis?


do {
    //some code
    while( expression to be evaluated );
    // some more code
}

Quisiera que se salga el bucle tan pronto como la instrucción while decida que la expresión ya no es verdadera (es decir, si la expresión es falsa, // no se ejecuta más código)

¿Fue útil?

Solución

Puedes hacer:

while (1) {
   //some code
   if ( condition) {
       break;
   }
   // some more code
}

Otros consejos

Un poco de historia y análisis: lo que estás pidiendo lo he escuchado llamado " Dahl loop " ;, el nombre de Ole-Johan Dahl de Simula. Como dice Sean E., C ++ no los tiene (aparte de la respuesta de ima), aunque otros idiomas sí los tienen (en particular, Ada). Puede tomar el lugar de " do-while " y " while-do " Bucles, lo que hace que sea una construcción útil. El caso más general permite un número arbitrario de pruebas. Mientras que C ++ no tiene una sintaxis especial para los bucles Dahl, las respuestas de Sean McCauliff y AraK son completamente equivalentes a ellas. El " while (verdadero) " El compilador debe convertir el bucle en un simple salto, por lo que la versión compilada es completamente indistinguible de la versión compilada de un bucle Dahl hipotético. Si lo encuentra más legible, también podría usar un

do {
    ...
} while (true);

Bueno, creo que deberías mover la condición a la mitad del bucle (?):

while (true)
{
  ...
  // Insert at favorite position
  if (condition)
    break;
  ...
}

Técnicamente, sí:

 for ( ;CodeBefore, Condition; ) {CodeAfter}

La respuesta es no, no puedes hacer que tu bucle termine automáticamente cuando la condición que la declaración while debe evaluar es verdadera hasta que realmente lo evalúe en la parte superior (o inferior) del bucle. La instrucción while no se puede colocar en el medio del bucle.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top