求助C语言双精度问题,

ninesong 2002-07-30 09:57:00
#include <stdio.h>
#include <math.h>
double hypotenuse (double x,double y);

main ()
{
double a,b;
printf ("Enter two numbers a&&b:");
scanf ("%f,%f",&a,&b);
printf ("%f%13.1f%13.1f",a,b,hypotenuse(a,b));
return 0;
}
double hypotenuse (double x,double y)
{
double c;
c=sqrt(x*x+y*y);
return (c);
}

为何我输入:3.0,4.0
老提示溢出???

...全文
78 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
alexxing 2002-07-30
  • 打赏
  • 举报
回复
printf ("%f%13.1f%13.1f",a,b,hypotenuse(a,b));
也要改成
printf ("%lf%13.1lf%13.1lf",a,b,hypotenuse(a,b));
注意数字“1”和字母“l”别混淆了

使用scanf,printf时格式化字符串一定要和实际参数类型一致!否则会造成地址错误。
格式化字符串中:%f 对应 float 类型(4字节),%lf 对应 double 型(8字节)

scanf("%f,%f",&a,&b);的执行结果是:
scanf 根据格式化字符串,认为你传递了两个float型的地址,就把a,b的前四个字节当作float类型填进相应数据,而后四个字节却没动,因而是随机数据,这样得到的double型数据,要么是随机的浮点数,要么溢出,要么是NaN(Not A Number)
laznhr 2002-07-30
  • 打赏
  • 举报
回复
是出在scanf("%f,%f,&a,&b);
改成scanf("%lf,%lf,&a,&b);就OK了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧