-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 *) 传递给需要 a 的参数double *。这会导致未定义的行为。您需要使用modff

fracp = modff(x,&intp);

或改为intpdouble

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.

为您的程序。

查看modfmodff手册页,看看你哪里出错了。

于 2013-10-08T21:32:38.277 回答