#include<stdio.h>
#include<math.h>
int main()
{
float i = 2.5;
printf("%d\n%d\n%d",i,i,i);
}
gcc を使用してこれをコンパイルして実行すると、次の出力が得られます。
0
1074003968
0
印刷されないのはなぜですか
2
2
2
float
(に変換されるdouble
) をに渡していますが、 .を期待するようにprintf
指示しています。その結果、未定義の動作が発生するため、少なくとも理論上は、あらゆることが起こる可能性があります。printf
int
通常、スタックからバイトをprintf
取得sizeof(int)
し、保持しているビット パターンを として解釈し、たまたまint
表す値を出力します。
ほぼ確実に必要なのは、に渡す前に to をキャストすることfloat
です。int
printf
フォーマット指定子は"%d"
10 進整数用です。"%f"
代わりに使用してください。
printf()
man pageを読んでみてください。
「%d」は 10 進整数 (通常は 32 ビット整数) の指定子であり、「%f」指定子は 10 進浮動小数点に使用されます。(通常は double または float)。
浮動小数点数の非 10 進数部分のみが必要な場合は、精度を 0 に指定できます。
すなわち
float i = 2.5;
printf("%.0f\n%.0f\n%.0f",i,i,i);
各値を int にキャストすることもでき、同じ結果が得られることに注意してください。
printf("%d\n%d\n%d",int(i),int(i),int(i));
%d
(int)
s ではなく10 進数の s を出力します(float)
。 printf()
a を渡したことが(float)
わかりません (C にはネイティブ オブジェクトがありません。値の型を尋ねることはできません)。渡したタイプに適切なフォーマット文字を使用する必要があります。