2013-05-16 3 views
1

Я использовал вложенный цикл while и столкнулся с проблемой, поскольку внутренний цикл запускается только один раз. Чтобы продемонстрировать, что я сделал несколько тестовых кодов.while loop inested in a while loop

#include <stdio.h> 
int main(){ 
    int i = 0; 
    int j = 0; 
    while(i < 10){ 
    printf("i:%d\n", i); 
    while(j < 10){ 
     printf("j:%d\n", j); 
     j++; 
    } 
    i++; 
    } 
} 

Это возвращает:

i:0 
j:0 
j:1 
j:2 
j:3 
j:4 
j:5 
j:6 
j:7 
j:8 
j:9 
i:1 
i:2 
i:3 
i:4 
i:5 
i:6 
i:7 
i:8 
i:9 

Может кто-нибудь объяснить, почему вложенный цикл не выполняется в 10 раз? И что я могу сделать, чтобы исправить это?

+0

Используйте два для() петель? – wildplasser

+0

используйте вместо петель! –

ответ

10

Вы никогда не возвращаете значение j в 0, и ваше внутреннее условие цикла никогда не будет истинным после первого запуска. Назначение j = 0; во внешнем цикле впоследствии должно исправить его.

+5

О, ничего себе. Сейчас я чувствую себя глупо. Ах, хорошо, не так, как в первый раз: p Спасибо! – Yananas

+0

Никогда? Никогда больше ...! -) – alk

+0

Собственно, никогда. Я установил его один раз, но никогда не делаю этого. – Yananas

1

После завершения внутреннего цикла вам необходимо установить значение j на 0.

1

j должен быть инициализирован равным 0 внутри цикла.

#include <stdio.h> 
int main(){ 
    int i = 0; 
    int j = 0; 
    while(i < 10){ 
    printf("i:%d\n", i); 
    j = 0 ; // initialization 
    while(j < 10){ 
     printf("j:%d\n", j); 
     j++; 
    } 
    i++; 
    } 
} 
+0

Продолжает расти? Нет. – alk

3

Потому что вы не сбрасываете его на каждой итерации внешнего контура. Если вы хотите, чтобы внутренний цикл, чтобы запустить десять раз тоже поставил инициализацию переменной j внутри внешнего контура, как это:

int i = 0; 
while (i < 10) { 
    printf("i:%d\n", i); 
    int j = 0; 
    while (j < 10) { 
     printf("j:%d\n", j); 
     j++; 
    } 
    i++; 
} 
1

Вам нужно сбросить J 0. Вы никогда не делать, что в ваш код Сделайте j равным 0 в вашем внешнем цикле.

1

Причина, по которой ваш внутренний цикл выполняется один раз, заключается в том, что вы инициализируете j до 0 вне цикла, а затем никогда не перезагружаете его снова. После запуска в первый раз значение j равно 10. Оно никогда не будет меньше 10.

Лучший способ сделать это состоит в использовании for цикла:

for (int i = 0; i < 10; i++){ 
    printf("i:%i\n", i); 
    for (int j = 0; j < 10; j++){ 
     printf("j:%i\n", j); 
    } 
} 

Это также делает уборщика кода вида.

0

Вы никогда не сбрасываете значение j в 0, и, как таковое, ваше внутреннее условие цикла никогда не будет истинным после первого запуска. Присвоение j = 0; во внешнем цикле впоследствии следует его исправить.