c语言问题:为什么会警告 '=' : conversion from 'double' to 'float', possible loss of data

程序如下
#include <stdio.h>
#include <math.h>
void main()
{
float r1,r2,x1,y1,x2,y2,i,d1,d2,d3;
for(i=1;i==1;)
{
printf("请输入第一个圆的半径");
scanf("%f",&r1);
printf("请输入第一个圆圆心的横纵坐标,以逗号分隔");
scanf("%f,%f",&x1,&y1);
printf("请输入第二个圆的半径");
scanf("%f",&r2);
printf("请输入第二个圆圆心的横纵坐标,以逗号分隔");
scanf("%f,%f",&x2,&y2);
d1=sqrt(pow((x1-x2),2)+pow((y1-y2),2));
d2=r1+r2;
d3=fabs(r1-r2);
if(r1==r2&&x1==x2&&y1==y2)
printf("这两个圆重合");
else if(d1>d2)
printf("这两个圆相离");
else if(d1==d2)
printf("这两个圆外切");
else if(d1<d2)
{if(d1>d3)
printf("这两个圆相交");
if(d1==d3)
printf("这两个圆内切");
if(d1<d3)
printf("这两个圆内含");
}
printf("\n若您需要继续计算其他圆位置关系,请按1;退出计算请按0;");
scanf("%f",&i);
}

}

函数都有原型,还包括数据及数据类型,即返回值、形式参数;当我们使用函数的实参和所赋值的变量与这些不匹配时,编译系统就会警告。
比如:int fun(int a,int,b,...)
调用时
y=fun(float i,float j),就会警告,有时还会发生运算错误。
改成:int y=fun(int i,int,i,...)即可避免。
我这里的编译系统是啊哈c,不出警告。用VC会有的。
有时可以采用强制转换数据类型来消除警告或避免错误。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-18
你的sqrt函数里面的参数默认是double类型的,返回值也是doublel类型;所以在调用fabs函数时候会提示从double到float转换会有肯能丢失数据
第2个回答  2013-10-18
pow((x1-x2),2)算出来为双精度doule类型 但后面你将doule变成float单精度类型

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网