1
#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
4

4 に答える 4

12

float(に変換されるdouble) をに渡していますが、 .を期待するようにprintf指示しています。その結果、未定義の動作が発生するため、少なくとも理論上は、あらゆることが起こる可能性があります。printfint

通常、スタックからバイトをprintf取得sizeof(int)し、保持しているビット パターンを として解釈し、たまたまint表す値を出力します。

ほぼ確実に必要なのは、に渡す前に to をキャストすることfloatです。intprintf

于 2012-04-25T20:46:11.517 に答える
2

フォーマット指定子は"%d"10 進整数用です。"%f"代わりに使用してください。

printf()man pageを読んでみてください。

于 2012-04-25T20:44:37.090 に答える
1

「%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));
于 2012-04-25T20:57:18.360 に答える
0

%d(int)s ではなく10 進数の s を出力します(float)printf()a を渡したことが(float)わかりません (C にはネイティブ オブジェクトがありません。値の型を尋ねることはできません)。渡したタイプに適切なフォーマット文字を使用する必要があります。

于 2012-04-25T20:45:48.403 に答える