2014-11-20 3 views
2

Я не понимаю, что именно делает оператор continue внутри этого цикла цикла. Как код отличается, если я его удалю? Какие строки он пропускает, если он помещен в конец цикла for?инструкция continue внутри вложенного цикла

int sum = 0, i, j, stop = 0; 
for(i = 1; i <= 5 && !stop; i++) 
{ 
    for(j = 1; j <= 5 ; j++) 
    { 
     if (j%4 == 0) 
     { 
      stop = 1; 
      continue; 
     } 
     sum += i+j; 
    } 
} 
printf("%d\n", sum); 

Если запустить эту программу сумма будет 15, и если вы закомментировать Countinue линию, то это будет 20.

+1

Пожалуйста отступы ваш код правильно, очень трудно читать, как есть. – dandan78

+0

http://msdn.microsoft.com/de-de/library/0ceyyskb.aspx – JaMaBing

+0

@ dandan78 Форматирование исправлено. Я сам этого не заметил из-за плохого форматирования. Спасибо всем за ответы. – Firmus

ответ

2

Было бы более ясным, если бы вы отформатировали код. Рассмотрим внутреннюю петлю

for(j = 1; j <= 5 ; j++) 
{ 
    if (j % 4 == 0) 
    { 
     stop = 1; 
     continue; 
    } 

    sum += i+j; 
} 

Таким образом, как вы видите, если J% 4 == 0, то оператор

sum += i+j; 

пропускается.

Что касается кода в целом, то он не имеет никакого смысла. :) Это глупый код.

На самом деле ваш код эквивалентен следующему

int sum = 0, j; 

for(j = 1; j <= 5 ; j++) 
{ 
    if (j != 4) sum += j + 1 
} 

printf("%d\n", sum); 

Таким образом, вы получите сумму 2 + 3 + 4 + 6, равное 15.:)

+0

, а у I-петли нет свиньи, так как она будет проходить только один раз – Mawg

0

continue оператор используется для начала следующей итерации цикл, пропуская все в цикле, после continue. В вашем случае, как только выполнение программы достигнет инструкции continue, начинается следующая итерация вашего внутреннего цикла, пропуская все, что было после continue. Он пропускает sum += i+j;, как и после continue, и сумма не будет добавлена, когда j составят 4, так как j%4 будет 0. Вот почему вы получаете 20, когда комментируете continue и 15, когда раскоментируете его.

P.S: Ваш внешний цикл будет выполняться только один раз, так как stop будет изменен внутри if во внутреннем цикле.

0

Оператор continue пропускает оставшуюся часть текущего контура. В случае вложенных циклов он переходит к следующей итерации самого внутреннего цикла.

В этом случае, если вы не продолжили работу, вы должны выполнить sum += i+j; на каждой итерации, где, по-видимому, вам это только нужно.

Это, как говорится, это очень неудобная петля для начала. Вся переменная stop довольно плохо задумана с самого начала.

0

continue вызывает замкнутую петлю for, чтобы начать следующую итерацию. В более простом примере, имеют следующий код:

for(int i = 0; i < 50; i++) 
{ 
    if(i % 2 == 1) // If it's odd 
     continue; 
    printf("%d\n", i); 
} 

В этом случае continue инструкции вызовет цикл for немедленно начать следующую итерацию, если i нечетное, следовательно, этот код будет печатать четные числа между 0 и 50.

0
int sum = 0, i, j, stop = 0; 

for(i = 1; i <= 5 && !stop; i++) 
{ 
    for(j = 1; j <= 5 ; j++) 
    { 
     if (j%4 == 0)     <===== is j divisible by 4 ? 
     { 
      stop = 1;     <=== set stop flag, will continue for J loop 
             but stop next I loop and end the routine 
      continue;   <==== skip the rest of the J loop for this itteration 
     } 

     sum += i+j; 
    } 
} 

printf("%d\n", sum); 

http://msdn.microsoft.com/en-us/library/0ceyyskb.aspx объясняет продолжить Заявление о

Смежные вопросы