while sentencia salir for etiquetas con anidados anidado c++ loops while-loop break

c++ - salir - sentencia break en java



cómo salir de los bucles anidados (6)

tengo algo así como

while(playAgain==true) { cout<<"new game"<<endl; //i know ''using namespace std;'' is looked down upon while(playerCard!=21) { *statements* if(decision==''n'') { break } ... } }

pero esa ruptura solo se rompe en el primer bucle while cuando quiero salir de ambos bucles


Básicamente hay dos opciones para llevar.

  1. Agregue la verificación de condición en el bucle externo.

    while ((playAgain==true) && (decision != ''/n''))

  2. Simplemente usa goto . A menudo se le dice a la gente que nunca use goto como si fuera un monstruo. Pero no me opongo a usarlo para salir de múltiples bucles. Está limpio y claro en esta situación.


Esta solución es específica para su caso. Cuando la decisión del usuario es ''n'', no quiere volver a jugar. Así que simplemente establezca playAgain en false y luego rompa. El lazo externo se romperá automáticamente.

while(playAgain==true){ cout<<"new game"<<endl; //i know ''using namespace std;'' is looked down upon while(playerCard!=21){ *statements* if(decision==''n''){ playAgain = false; // Set this to false, your outer loop will break automatically break; } } }


Si no tiene que evitar la instrucción goto , puede escribir

while (a) { while (b) { if (c) { goto LABEL; } } } LABEL:


Use goto:

while(playAgain==true) { cout<<"new game"<<endl; //i know ''using namespace std;'' is looked down upon while(playerCard!=21) { *statements* if(decision==''n'') { goto label; } ... } } label: ...


No cocines spaghetti y extraigas tus loops en la función:

void foo(...) { while (...) { /* some code... */ while (...) { if ( /* this loop should stop */ ) break; if ( /* both loops should stop */ ) return; } /* more code... */ } }

esta descomposición también arrojará un código más limpio ya que en lugar de cientos de líneas de código de procedimiento feo, tendrá funciones ordenadas en diferentes niveles de abstracción.


while(playAgain==true && decision !=''n'' ){ ^^ add a condition cout<<"new game"<<endl; while(playerCard!=21){ *statements* if(decision==''n''){ break } ... } }