我做错了什么当我输入任何数字时,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;
}
答案 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。