Pourquoi cette division entière donne 0?

Quelqu’un pourrait-il me dire pourquoi le code suivant affiche 0 sur la ligne marquée?

Il semble que tout soit correct, mais lorsque j’essaie d’obtenir le résultat vers la fin, il me donne 0 à chaque fois.

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

En bref: la division entière est tronquée

Vous avez besoin des éléments suivants:

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

Vous effectuez des calculs entiers.

Les maths entre deux entiers produiront un entier. Et le résultat sera arrondi vers zéro.

Cette ligne:

 totalLengthSecs / totalFrames; 

Donne probablement un résultat compris entre 0 et 1 . Et se arrondir à 0

Vous imprimez des entiers et par conséquent, la valeur sera arrondie.

timeLapseInterval / totalFrames sera (1 / frameRate) qui sera <1 sauf si frameRate est 1 (ou 0 auquel cas vous avez une erreur divisant par 0)

Lorsque vous divisez 2 nombres en C et que le dénominateur est un entier, le compilateur le désigne comme une division entière. Par conséquent, si vous divisez 1 divisé 2, il renvoie zéro et non 0,5

De plus, votre variable de sortie est également un entier. Par conséquent, si vous attendez des sorties décimales, vous ne l’obtiendrez pas.

Vous pouvez le réparer en faisant:

float timeLapseInterval = totalLengthSecs / (float) totalFrames;

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

J’espère que ça aide