有人可以告诉我为什么以下代码在标记的行输出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 :(得分:4)
简而言之:整数除法截断
您需要以下内容:
double timeLapseInterval = (double) totalLengthSecs / (double)totalFrames;
printf("\ntimeLapseInterval : %f \n", timeLapseInterval);
答案 1 :(得分:3)
您正在执行整数数学。
两个整数之间的数学将产生一个整数。结果将四舍五入为零。
这一行:
totalLengthSecs / totalFrames;
可能产生的结果介于0
和1
之间。并四舍五入到0
答案 2 :(得分:1)
您正在打印整数,因此它将向下舍入该值。
timeLapseInterval / totalFrames
将是(1 / frameRate)
,它将是&lt; 1除非frameRate为1(或0,在这种情况下,你有一个错误除以0)
答案 3 :(得分:0)
当您在C中除以2个数且分母为整数时,编译器将其视为整数除法。因此,如果将1除以2,则返回零而不是0.5
此外,你的输出变量也是一个整数,因此,如果你期望十进制输出,你就不会得到它。
您可以通过执行以下操作来解决此问题:
float timeLapseInterval = totalLengthSecs /(float)totalFrames;
printf(“\ n \ n%f”,timeLapseInterval);
我希望这会有所帮助