2013-05-16 6 views
1

중첩 된 while 루프를 사용하면서 내부 루프가 한 번만 실행되므로 문제가 발생했습니다. 테스트 코드를 약간 작성했습니다.While 루프가 while 루프에 중첩 된 경우

#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++; 
    } 
} 

이 반환 값 : 중첩 루프 10 번 실행하지 않는 이유

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 

사람이 설명 할 수 있습니까? 그리고 그것을 해결하기 위해 무엇을 할 수 있습니까?

+0

for() 루프를 두 개 사용 하시겠습니까? – wildplasser

+0

대신 루프를 사용하십시오! –

답변

10

j의 값을 0으로 재설정하지 않으므로 첫 번째 실행 후 내부 루프 조건이 참이 될 수 없습니다. 나중에 외부 루프에 j = 0;을 할당하면 해결됩니다.

+5

와우. 지금 바보 같아. 아아, 처음이 아니야 : P 고마워! – Yananas

+0

절대로? 다시는 ...!) -) – alk

+0

사실, 절대로. 나는 그것을 한 번 설정했지만 절대로 다시 설정하지 않습니다. – Yananas

1

내부 루프가 완료된 후 값 j0으로 다시 설정해야합니다.

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

당신은 당신이 이제까지 그렇게하지 않는 0으로 J를 재설정해야 귀하의 코드 외부 루프에서 j를 0으로 설정하십시오.

1

내부 루프가 한 번만 실행되는 이유는 루프 외부에서 j를 0으로 초기화 한 다음 다시 초기화하지 않기 때문입니다. 첫 번째 실행 후 j의 값은 10입니다. 다시는 10보다 작아서는 안됩니다. 또한 코드 모양 청소기를 만드는

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

:

이 작업을 수행하는 더 좋은 방법은 for 루프를 사용하는 것입니다.

0

j 값을 0으로 재설정하지 않으므로 첫 번째 실행 후 내부 루프 조건이 참이 될 수 없습니다. j = 0으로 지정; 이후에 바깥 쪽 루프에서 그것을 고쳐야합니다.