Почему это целочисленное деление дает 0?

Может ли кто-нибудь сказать мне, почему следующий код выводит 0 на отмеченной строке?

Кажется, что все правильно, но затем, когда я пытаюсь получить результат ближе к концу, он дает мне 0 каждый раз.

 #include  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; } 

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

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

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

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

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

Эта строка:

 totalLengthSecs / totalFrames; 

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

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

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

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

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

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

float timeLapseInterval = totalLengthSecs / (float) totalFrames;

printf (“\ n \ n% f”, timeLapseInterval);

надеюсь, это поможет