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.
Agregue la verificación de condición en el bucle externo.
while ((playAgain==true) && (decision != ''/n''))
Simplemente usa
goto
. A menudo se le dice a la gente que nunca usegoto
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
}
...
}
}