このコードを実行すると、1610612736 が返されます
void main(){
float a=3.3f;
int b=2;
printf("%d",a*b);
}
これを修正する理由と方法は?
編集 : int b=2: を float b=2.0f に置き換えても、整数と浮動小数点数の問題ではありません。同じ愚かな結果が返されます。
float
aと anの乗算の結果int
は afloat
です。double
その上、に渡すとに昇格しprintf
ます。%a
、、または形式%e
が必要です。この形式は、タイプを印刷するために使用されます。%f
%g
%d
int
編集者注記: の戻り値は である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
または、次のこともできます
printf("%d\n", (int)(a*b));
そして、これはあなたが(一種の)期待している結果を出力します。
書式文字列に一致するように常に変数を明示的に型キャストする必要があります。そうしないと、奇妙な値が出力されることがあります。