2011-06-16 12 views
13

¿Qué enunciado se ejecutará después de "continuar" o "romper"?C++ continuar versus romper

for(int i = 0; i < count; ++i) 
{ 
    // statement1                                                       
    for(int j = 0; j < count; ++j) 
    { 
     //statement2                                                      
     if(someTest) 
      continue; 
    } 
    //statement3                                                       
} 

for(int i = 0; i < count; ++i) 
{ 
    // statement1                                                       
    for(int j = 0; j < count; ++j) 
    { 
     //statement2                                                      
     if(someTest) 
      break; 
    } 
    //statement3                                                       
} 
+4

¿No podrías averiguarlo por simple depuración/rastreo? –

+1

Es fácil de verificar. ¿Tienes algún compilador? –

+3

ah, está bien ... solo algunas veces, el concepto de agarrar es mejor que probar – eugene

Respuesta

21

siguen: ++j y luego, si j < count continuación statement2 lo contrario statement3

ruptura: statement3

+0

Para el primer caso: no exactamente. Después de ++ j, la prueba de bucle (j subhacom

+0

Sí, lo corregí –

+0

+1 conciso, correcto, fácil de entender. –

20

Continuar salta directamente a la parte superior del bucle más interior, donde se llevará a cabo el código y continuación de verificación per-iteración (secciones 3 y 2 del bucle for).

El salto salta directamente al lazo más interno sin cambiar nada.

Puede ser más fácil pensar en el primero saltando al corsé de cierre del bucle más interno mientras el último salta un poco más allá.

+0

Lo siento, pero -1 por no responder realmente la pregunta, en que "continue saltos ... incrementando el contador", pero esto no describe el siguiente paso - volver a probar la condición, y eso determina si la declaración 2 o 3 ejecuta. Puede parecer demasiado obvio para deletrear, pero cuando hay una pregunta sobre el descanso y continuar, estas cosas no se pueden dar por sentado.: - /. –

+1

Bastante. Vivimos y aprendemos Gracias por la sugerencia – jpm

+0

@paxdiablo Gracias por la edición. Agregó un poco de claridad. – jpm

2

Continue: Depende. La instrucción continue ejecutará la parte 'incremento' del for-loop, luego la parte 'prueba', y luego decidirá si ejecuta la siguiente iteración o abandona el ciclo. lo que podría ser comunicado 2 o 3.

Break: Declaración 3.

Por cierto, es esta tarea?

+0

no, pregunta real – eugene

2

statement2 se ejecutará después de continuar, dado que el ciclo no estaba en la última iteración.

statement3 se ejecutará después del descanso.

'continuar' (como su nombre indica) continúa el ciclo, omitiendo el resto de las instrucciones en la iteración actual.

'break' se rompe y sale del ciclo.

10

continue termina la iteración actual, prácticamente es el mismo que:

for(int i = 0; i < count; ++i) 
{ 
    // statement1                                                       
    for(int j = 0; j < count; ++j) 
    { 
     //statement2                                                      
     if(someTest) 
      goto end_of_loop; 
end_of_loop: 
    } 
    //statement3                                                       
} 

break sale del bucle:

for(int i = 0; i < count; ++i) 
{ 
    // statement1                                                       
    for(int j = 0; j < count; ++j) 
    { 
     //statement2                                                      
     if(someTest) 
      goto after_loop; 
    } 
after_loop: 
    //statement3                                                       
} 
+3

+1 Una forma potencialmente fácil de seguir para explicarlo, pero habría sido incluso más claro si hubo algún código en el circuito después de la prueba (lo sé, no es tu culpa, solo la forma en que la pregunta fue). –

-1
  1. Para continuar, Innerloop se ejecuta con el nuevo i, j valores de i, j + 1

  2. Para el descanso, se ejecuta innerloop d con nuevos valores i, j de i + 1,0

por supuesto, si las condiciones de contorno son satisfechos

Cuestiones relacionadas