2

重複の可能性:
intをfloatとして出力するときのprintfの動作は何ですか?

int main()
{
 int x=4;
 int y=987634;
 printf("%f %f",x,y);
}

このコードをコンパイルすると、0.0000000.000000として出力が得られます。xとyの浮動小数点数への型昇格があるべきではありませんか?O / Pは4.000000と987634.000000にすべきではありませんか?誰かがこれで私を助けることができますか?よろしくお願いします。

4

5 に答える 5

5

変換は、特定のパラメーターを含むプロトタイプを持つ関数への引数に対して行われます。のプロトタイプにprintf()は、最初のパラメータの後の特定のパラメータは含まれていません

int printf(const char *format, ...);

したがって、最初の引数以降の引数は、「デフォルトの引数変換」で定義されている場合を除いて、自動的に変換されません(基本的に、ランクがto未満の整数型と、ランクがintto未満のint浮動小数点型(ありがとう、Pascal Cuoq)) )。キャスト操作で明示的に変換する必要がありますdoubledouble

    printf("%f %f\n", (double)x, (double)y);

ああ...そしてあなたは本当に、本当に、本当に、問題のプロトタイプを持っているヘッダーを含めるべきです(未定義動作のペナルティの下で)

#include <stdio.h>
于 2012-11-27T16:50:15.710 に答える
1

コンパイラは、printfフォーマット文字列が引数をfloatとして解釈しようとしていることを認識していません。それはそれらをsとしてまっすぐに通過させますint

はvarargs関数であるためprintf、意味のあるパラメーターを渡すのは実際にはあなた次第です。

于 2012-11-27T16:49:11.133 に答える
0

可変個引数署名には型情報が含まれていないため、可変個引数関数(printf()は1つ)は型チェックされません。したがって、暗黙の型キャストはありません。手動で行う必要があります。

printf("%f %f", (double)x, (double)y);
于 2012-11-27T16:51:36.503 に答える
0

printf("%i %i",x,y);整数をとして出力してみてください4 987634printfフォーマットの詳細については、http //www.cplusplus.com/reference/cstdio/printf/を参照してください。

于 2012-11-27T16:49:11.567 に答える
0

intsとfloatsはメモリに異なる方法で格納されますが、コンパイラはフロートが必要であることを認識していません。それらを明示的に変換する必要があります。

printf("%f %f",(float)x,(float)y);
于 2012-11-27T16:51:08.800 に答える