2012-01-11 3 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' для«требуемой длины покадровой»? –

+2

Если 'totalLengthSecs/totalFrames' меньше 1, оно обрезается до 0, потому что все значения являются целыми числами, а не числами с плавающей запятой. –

ответ

4

Короче говоря: целочисленное деление обрезает

Вам необходимо следующее:

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

Вы печатаете целые числа, и поэтому он будет округлить значение.

timeLapseInterval/totalFrames будет (1/frameRate), который будет < 1, если частота кадров не является 1 (или 0, в этом случае у вас есть делени ошибки на 0)

3

Вы выполняете целочисленную арифметику.

Математика между двумя целыми числами будет производить целое число. И результат будет округлен до нуля.

Эта линия:

totalLengthSecs/totalFrames; 

, вероятно, производит результат, который находится между 0 и 1. И округление до 0

+0

Какую переменную мне нужно назначить, чтобы дать мне нормальную математическую обработку. Привет, друг! – Chris

0

Когда вы делите 2 числа в C и знаменатель является целым числом, компилятор намеревается его как целочисленное деление. Поэтому, если вы разделите 1 разделенный 2, он возвращает ноль, а не 0,5

Кроме того, ваша выходная переменная также является целым числом, следовательно, если вы ожидаете десятичных выходов, вы не получите ее.

Вы можете это исправить, выполнив:

поплавок timeLapseInterval = totalLengthSecs/(с плавающей точкой) totalFrames;

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

Я надеюсь, что это помогает

Смежные вопросы