8

このコードを実行すると、1610612736 が返されます

void main(){
float a=3.3f;
int b=2;
printf("%d",a*b);
}

これを修正する理由と方法は?

編集 : int b=2: を float b=2.0f に置き換えても、整数と浮動小数点数の問題ではありません。同じ愚かな結果が返されます。

4

2 に答える 2

16

floataと anの乗算の結果intは afloatです。doubleその上、に渡すとに昇格しprintfます。%a、、または形式%eが必要です。この形式は、タイプを印刷するために使用されます。%f%g%dint

編集者注記: の戻り値は であるmain必要がありますint。固定プログラムは次のとおりです。

#include <stdio.h>

int main(void)
{
    float a = 3.3f;
    int b = 2;
    printf("%a\n", a * b);
    printf("%e\n", a * b);
    printf("%f\n", a * b);
    printf("%g\n", a * b);
    return 0;
}

およびその出力:

$ ./example 
0x1.a66666p+2
6.600000e+00
6.600000
6.6
于 2013-06-12T04:29:04.273 に答える
3

または、次のこともできます

printf("%d\n", (int)(a*b));

そして、これはあなたが(一種の)期待している結果を出力します。

書式文字列に一致するように常に変数を明示的に型キャストする必要があります。そうしないと、奇妙な値が出力されることがあります。

于 2013-06-12T05:25:48.973 に答える