为什么这个整数除法的结果是0?

4

有人能告诉我为什么以下代码在标记行输出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;
}

你正在输入什么到stdin中,以获取“延时拍摄所需的时间长度”? - Dan Fego
2
如果 totalLengthSecs / totalFrames 小于1,则会被截断为0,因为所有值都是整数,而不是浮点数。 - Some programmer dude
4个回答

4
简而言之:整数除法会截断结果。
你需要以下内容:
double timeLapseInterval = (double) totalLengthSecs / (double)totalFrames;
printf("\ntimeLapseInterval : %f \n", timeLapseInterval);

3

您正在执行整数运算。

两个整数之间的运算将产生一个整数,结果将向零舍入。

以下是需要翻译的内容:

totalLengthSecs / totalFrames;

可能会产生一个介于0和1之间的结果,并被四舍五入为0。

要使它可以进行正常的数学处理,我需要将其分配给哪个变量?谢谢老兄! - Chris

1

您正在打印整数,因此它将向下舍入该值。

timeLapseInterval / totalFrames 将是 (1 / frameRate),除非 frameRate 为 1(或为 0,在这种情况下,您会因为除以 0 而出现错误),否则它将小于 1。


0

当你在C语言中除以两个数字,分母是整数时,编译器会将其视为整数除法。因此,如果你将1除以2,它会返回0而不是0.5。

此外,你的输出变量也是整数,因此,如果你期望得到小数输出,你将得不到。

你可以通过以下方式解决这个问题:

float timeLapseInterval = totalLengthSecs / (float)totalFrames;

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

希望这能帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接