2012-01-11 14 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

"希望の長さの経過時間"には何を入力していますか? –

+2

'totalLengthSecs/totalFrames'が1より小さい場合は、すべての値が浮動小数点数ではなく整数であるため、切り捨てられます。 –

答えて

4

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

あなたは整数を印刷しているので、それが値を切り捨てます:整数の除算は、あなたが以下のものが必要

を切り捨てます。

timeLapseInterval/totalFramesは、フレームレートはあなたが整数演算を実行している(あなたは0で割るエラーを持っている場合または0)1

3

でない限り< 1になりますどの(1/frameRate)になります。

2つの整数の間の数式は整数を生成します。結果はゼロに丸められます。

このライン:

totalLengthSecs/totalFrames; 

はおそらく01間だ結果を生産しています。 0

+0

正常な数学的処理をするために、これを割り当てるために必要な変数は何ですか。歓声メイト! – Chris

0

2つの数値をCで割って分母を整数にすると、コンパイラはそれを整数除算とします。したがって、1を2に分割した場合、0を返します。0.5

また、出力変数も整数です。したがって、小数点出力が必要な場合は取得できません。

次の操作を行うことによってそれを修正することができます:

フロートtimeLapseInterval = totalLengthSecs /(フロート)totalFrames。

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

これは役に立ちます。

関連する問題