2012-10-15 5 views
-1

첫 번째 코드는 1의 경우 82로 나옵니다. 계승 ... 왜? do 루프가 완벽하게 작동한다고 생각하면 실제로 나에게 어떤 의미가 없습니다. 프로그램을 실행하면 계승에 대한 모든 답을 제공하는 표가 나타납니다. do 루프는 내가해야 할 일은 괜찮지 만 사용할 수는 없다.실행하면 왜 82로 표시됩니까? For 루프 - Factorial

for 루프가 제대로 작동하지 않는 이유는 무엇입니까?

#include <stdio.h>          /* Necessary header */ 
#define LAST_NUMBER 25         /* Macro preset to avoid magic numbers */ 

int main(void)           /* Start executive method */ 
{ 
    int Nbr; 
    signed long total = Nbr; 

    printf("Nbr    Nbr!");     /* Table Headers */ 
    printf("\n----------------------"); 

    for (Nbr = 1; Nbr<=LAST_NUMBER;)    /* Loop statement begins */ 
    { 
     total *= Nbr; 
     printf("\n%2d %15ld", Nbr, total); 
       Nbr++; 
             /* Prints both columns for table */ 
    }      /* Loop ends when predefined number is reached */ 

    return 0; 
}              /* End main method */ 

/* The following code works fine */ 

#include <stdio.h>          /* Necessary header */ 
#define LAST_NUMBER 25         /* Macro preset to avoid magic numbers */ 

int main(void)           /* Start executive method */ 
{ 
    int Nbr = 1; 
    signed long total = Nbr; 

    printf("Nbr    Nbr!");     /* Table Headers */ 
    printf("\n----------------------"); 

    do             /* Loop statement begins */ 
    { 
     total *= Nbr; 
     printf("\n%2d %15ld", Nbr, total);   /* Prints both columns for table */ 
     Nbr++; 
    }while (Nbr<=LAST_NUMBER);       /* Loop ends when predefined number is reached */ 

    return 0; 
}              /* End main method */ 
+1

첫 번째 예에서는 'total'을 가비지로 초기화하고 두 번째 예에서는'1 '로 초기화합니다. – geoffspear

+0

계승 값이 21에서 64 비트 범위를 초과합니다. 에. –

+0

예. 나는 알아 챘지만, 현재의 주제에 대해서는 그렇게 중요하지 않다. – user1728737

답변

2
int Nbr; 
signed long total = Nbr; 

당신이 그들을 사용하기 전에 변수를 초기화해야합니다.

+0

LOL. 좋은 캐치, 그것도 빠르다. 감사. – user1728737

0

첫 번째 경우 Nbr을 전체에 할당하기 전에 초기화하지 않으므로 초기 값은 입니다. 중간 값은입니다. auto 범위 (함수 또는 블록에서 선언되고 static 키워드가없는 변수)는 초기화되지 않은 상태로 유지됩니다.

+0

대단히 감사합니다! – user1728737