int main()
{
int x=4;
int y=987634;
printf("%f %f",x,y);
}
このコードをコンパイルすると、0.0000000.000000として出力が得られます。xとyの浮動小数点数への型昇格があるべきではありませんか?O / Pは4.000000と987634.000000にすべきではありませんか?誰かがこれで私を助けることができますか?よろしくお願いします。
int main()
{
int x=4;
int y=987634;
printf("%f %f",x,y);
}
このコードをコンパイルすると、0.0000000.000000として出力が得られます。xとyの浮動小数点数への型昇格があるべきではありませんか?O / Pは4.000000と987634.000000にすべきではありませんか?誰かがこれで私を助けることができますか?よろしくお願いします。
変換は、特定のパラメーターを含むプロトタイプを持つ関数への引数に対して行われます。のプロトタイプにprintf()
は、最初のパラメータの後の特定のパラメータは含まれていません
int printf(const char *format, ...);
したがって、最初の引数以降の引数は、「デフォルトの引数変換」で定義されている場合を除いて、自動的に変換されません(基本的に、ランクがto未満の整数型と、ランクがint
to未満のint
浮動小数点型(ありがとう、Pascal Cuoq)) )。キャスト操作で明示的に変換する必要がありますdouble
double
printf("%f %f\n", (double)x, (double)y);
ああ...そしてあなたは本当に、本当に、本当に、問題のプロトタイプを持っているヘッダーを含めるべきです(未定義動作のペナルティの下で)
#include <stdio.h>
コンパイラは、printf
フォーマット文字列が引数をfloatとして解釈しようとしていることを認識していません。それはそれらをsとしてまっすぐに通過させますint
。
はvarargs関数であるためprintf
、意味のあるパラメーターを渡すのは実際にはあなた次第です。
可変個引数署名には型情報が含まれていないため、可変個引数関数(printf()は1つ)は型チェックされません。したがって、暗黙の型キャストはありません。手動で行う必要があります。
printf("%f %f", (double)x, (double)y);
printf("%i %i",x,y);
整数をとして出力してみてください4 987634
。printf
フォーマットの詳細については、http : //www.cplusplus.com/reference/cstdio/printf/を参照してください。
int
sとfloat
sはメモリに異なる方法で格納されますが、コンパイラはフロートが必要であることを認識していません。それらを明示的に変換する必要があります。
printf("%f %f",(float)x,(float)y);