22018, 1/1101 회원가입  로그인  
   wpfl0107
   while문 중첩 질문

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=33126 [복사]


C언어를 공부하던중 문제를 풀고있었는데 도저히 이해가 안되는 부분이있습니다.

5개의 정수를 입력받아 그수의 합을 구하는 프로그램인데요 정수는 반드시 1 이상이어야 한다네요.

그래서

#include <stdio.h>
int main(void)
{
        int num=0;
        int i=0;
        int result=0;

        while(i<5)
        {
                while(num<=0)
                {
                        printf("0이상의 정수 입력 :");
                        scanf("%d", &num);
                        result+=num;
                }
                i++;
        }
        printf("덧셈 결과는 %d 입니다.", result);
        return 0;
}

이렇게 입력했는데요, 이게 i 가 5를 만족하지않았으므로 다시 올라가서 반복되야하는데 결과가 입력한 값으로만나옵니다.0을 입력했을때 다시 입력하라는건 되는데.... 왜이러는 걸까요?

  Hit : 11538     Date : 2015/01/24 05:59



    
wpfl0107 아 왜그런지 알았습니다 넘을 0으로 초기화하지 않아서 그런거군요.근데 답지보니까 #include <stdio.h>
int main(void)
{
int num=0;
int i=0;
int result=0;

while(i<5)
{
while(num<=0)
{
printf("0이상의 정수 입력 :");
scanf("%d", &num);
result+=num;
}
num=0;
i++;
}
printf("덧셈 결과는 %d 입니다.", result);
return 0;
}


i 에다가 1을 또 더하던데 왜그런건가요?
2015/01/24  
skyclad1975 현재 첫 번째 while문이 계속 반복되는 조건으로 들어간 것이 i 라는 변수이고,
이 변수는 main에서 0으로 초기화되었습니다.
한 번 받아서 result에 더한 후, i에는 1을 더합니다.
또 한 번 받아서 result에 더한 후, i에는 1을 더합니다.
이런식으로 총 다섯 번을 반복하면 i는 5가 되므로 i<5 라는 조건을 만족하지 못하게 되어 while문을 빠져나오고, printf를 실행하게 되는 겁니다.

for(i=0; i<5; i++) {}

이런 for문의 i++과 같은 겁니다.
2015/01/24