2012-01-11 27 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);

我希望这可以帮助

相关问题