-3

modf 関数を使用しようとしていますが、正しく機能しません。変数の整数部分に署名しません。

float intp;
float fracp;
float x = 3.14;
fracp = modf(x,&intp);
printf("%f %f\n", intp,fracp);

0.00000 0.14000 私が間違っていることを私に教えてくれますか?

4

1 に答える 1

2

を必要とするパラメーターに&intp(a ) を渡しています。これにより、未定義の動作が発生します。使用する必要があります:float *double *modff

fracp = modff(x,&intp);

または代わりに次intpのようにします。double

double intp;

そして、あなたは大丈夫です。

コンパイラでより多くの警告をオンにする必要があります。たとえば、特別なフラグがなくても、clang は次のようになります。

example.c:9:20: warning: incompatible pointer types passing 'float *' to
      parameter of type 'double *' [-Wincompatible-pointer-types]
    fracp = modf(x,&intp);
                   ^~~~~
/usr/include/math.h:400:36: note: passing argument to parameter here
extern double modf(double, double *);
                                   ^
1 warning generated.

あなたのプログラムのために。

modfおよびmodffman ページをチェックして、どこで問題が発生したかを確認してください。

于 2013-10-08T21:32:38.277 に答える