modf函数intpart是零?

时间:2016-08-02 13:18:19

标签: c

我做错了什么当我输入任何数字时,intpart总是等于0

#include <stdio.h>
#include <math.h>

int main(int argc, char* argv[])
{
double x=0.,fraction=0.;
int intpart=0;
printf("read value of x :");
scanf("%lf",&x);
fraction=modf(x,&intpart);
printf("x=%f    intpart=%d   fraction=%f \n",x,intpart,fraction);
return 0;
}

1 个答案:

答案 0 :(得分:2)

modf()double*作为其第二个参数。但是你传递的是int*。所以,它是undefined behaviour。解决方案是使用double*

更改

int intpart=0;

double iptr = 0;

在启用所有警告的情况下进行编译。 Clang发出警告:

  

警告:不兼容的指针类型将'int *'传递给参数   输入'double *'[-Wincompatible-pointer-types]

和gcc产生:

  

警告:从不兼容的指针类型传递'modf'的参数2   [-Wincompatible指针类型]

见C11草案,7.12.6.12,The modf functions