2012-01-11 4 views
4

누군가 다음 코드가 표시된 행에 0을 출력하는 이유를 설명해 주시겠습니까?왜이 정수 나누기가 0입니까?

마치 모든 것이 정확한 것처럼 보이지만 끝 근처에서 결과를 얻으려고하면 매번 0이됩니다. 한마디로

#include <stdio.h> 

int main() { 

    // Gather time-lapse variables 

    int frameRate, totalLengthSecs; 
    printf("How many frames per second: "); 
    scanf("%i", &frameRate); 
    printf("--> %i frames confirmed.", frameRate); 
    printf("\nDesired length of time-lapse [secs]: "); 
    scanf("%i", &totalLengthSecs); 
    printf("--> %i seconds confirmed.", totalLengthSecs); 
    int totalFrames = frameRate * totalLengthSecs; 
    printf("\nYou need %i frames.", totalFrames); 

    // Time-lapse interval calculation 

    int timeLapseInterval = totalLengthSecs/totalFrames; 

    printf("\n\n%i", timeLapseInterval); // <-- this prints 0 

    return 0; 
} 
+0

"원하는 시간의 경과 시간"에 대해 "표준 입력"으로 무엇을 입력하고 있습니까? –

+2

'totalLengthSecs/totalFrames'가 1보다 작 으면 모든 값이 부동 소수점 숫자가 아닌 정수이기 때문에 0으로 절단됩니다. –

답변

4

:

double timeLapseInterval = (double) totalLengthSecs/(double)totalFrames; 
printf("\ntimeLapseInterval : %f \n", timeLapseInterval); 
1

당신은 정수를 인쇄하기 때문에이 값을 내림합니다 : 정수 나누기는

는 다음과 같은 필요로 자릅니다.

timeLapseInterval/totalFrames

는 프레임 율 (당신은 0으로 오류 분할이있는 경우 또는 0) 일 경우를 제외하고 정수 연산을 수행하는

3

< 1이됩니다 (1/frameRate) 될 것입니다.

두 정수 사이의 수학은 정수를 생성합니다. 결과는 0으로 반올림됩니다.

이 줄 :

totalLengthSecs/totalFrames; 

가능성이 01 사이의 결과를 생산하고있다. 그리고 반올림하는 것 0

+0

정상적인 수학적 처리를 위해 어떤 변수를 할당해야합니까? 힘내 친구 야! – Chris

0

C로 2 개의 숫자를 나눌 때 분모가 정수인 경우 컴파일러는이를 정수로 간주합니다. 따라서 1을 나눈 값을 2로 나누면 0.5가 아닌 0을 반환합니다.

또한 출력 변수도 정수입니다. 따라서 십진수 출력이 필요하면 출력 변수를 얻을 수 없습니다.

당신은 수행하여 문제를 해결할 수 있습니다

플로트 timeLapseInterval = totalLengthSecs/(플로트) totalFrames을;

printf ("\ n \ n % f", timeLapseInterval);

이 도움이 되었기를 바랍니다.

관련 문제