
Gracias
Tengo dos bucles for anidados así:
for(...) {
for(...) {
}
}
Sé que hay un break
declaración. Pero estoy confundido acerca de si rompe ambos bucles o solo uno en el que se llamó. Necesito romper ambos tan pronto como vea que no tiene sentido iterar más veces.

Ori Pesaj
Si usar goto simplifica el código, entonces sería apropiado.
for (;;)
{
for (;;)
{
break; /* breaks inner loop */
}
for (;;)
{
goto outer; /* breaks outer loop */
}
}
outer:;

jbasko
break sale de un bucle, pero puede agregar una verificación al bucle exterior que se rompe cuando se rompe el interior.
bool dobreak = false;
for ( ..; !dobreak && ..; .. ) {
for ( ... ) {
if (...) {
dobreak = true;
break;
}
}
}
los break
La declaración solo lo saca del bucle más interno. Si no desea la sobrecarga adicional en el código, la memoria y el rendimiento de una variable de estado dedicada, le recomiendo refactorizar el código en una función o método propio y usar return
para salir de todos los bucles:
void do_lots_of_work(void)
{
int i, j;
for(i=0; i<10 ; i++)
{
for(j=0;j< 10; j++)
{
..
..
if(disaster_struck())
return; /* Gets us out of the loops, and the function too. */
}
}
}

lothar
Además de la variable de bandera ya mencionada o goto, podría lanzar una excepción de Objective-C:
@try {
for() {
for() {
@throw ...
}
}
}
@catch{
...
}

Jorge Armhold
Otros han mencionado cómo puede establecer una bandera o usar un goto
, pero recomendaría refactorizar su código para que el ciclo interno se convierta en un método separado. Ese método puede devolver alguna bandera para indicar que el ciclo externo debería break
. Si nombra sus métodos apropiadamente, esto es mucho más legible.
for (int i = 0; i < 10; i++) {
if (timeToStop(i)) break;
}
-(bool) timeToStop: (int) i {
for (int j = 0; j < 10; j++) {
if (somethingBadHappens) return true;
}
return false;
}
Pseudocódigo, no probado, pero entiendes la idea.

nick allen
La instrucción break solo saldrá del bucle en el ámbito, que es el bucle principal. Si también desea salir del segundo bucle, puede usar una variable booleana que esté dentro del alcance de ambos bucles.
bool isTerminated = false;
for (...)
{
if (!isTerminated)
{
for(...)
{
...
isTerminated = true;
break;
}
}
else
{
break;
}
}

oxigeno
Cambiar el contador del bucle superior antes del descanso
for(i=0; i<10 ; i++)
for(j=0;j< 10; j++){
..
..
i = 10;
break;
}