2012-01-11 41 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

你在「stdin」中輸入「期望的延時長度」是什麼? – 2012-01-11 14:24:16

+2

如果totalLengthSecs/totalFrames小於1,則它被截斷爲0,因爲所有值都是整數,而不是浮點數。 – 2012-01-11 14:26:44

回答

4

簡而言之:整數除法截斷

您需要:

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

您打印整數,因此它會向下取整數值。

timeLapseInterval/totalFrames(1/frameRate)這將是< 1除非幀率爲1(或0在這種情況下必須通過0的誤差分)

3

您正在執行整數運算。

兩個整數之間的數學運算將產生一個整數。結果將趨於零。

這條線:

totalLengthSecs/totalFrames; 

很可能產生一個結果01之間的。並且四捨五入爲0

+0

爲了給我正常的數學處理,我需要指定這個變量。隊友的歡呼聲! – Chris 2012-01-11 14:43:32

0

當您在C中劃分2個數字且分母爲整數時,編譯器將其視爲整數除法。因此,如果你除以1除以2,它返回零而不是0.5

此外,你的輸出變量也是一個整數,因此,如果你期望小數輸出,你不會得到它。

可以通過執行修復:

浮子timeLapseInterval = totalLengthSecs /(浮點)totalFrames;

printf(「\ n \ n%f」,timeLapseInterval);

我希望這可以幫助