正文

[055] double型数的输入2006-05-09 22:36:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/13822.html

分享到:

    最近在做图形学上机,遇到许多问题,其中关于double型数的输入因为一个简单的错误,却困惑了很久。在书中看到用printf()函数输出时,用格式%f可以输出实数,包括单精度,双精度数,隐含输出6位小数。所以误以为对scanf()也是一样的,所以程序中输入用了如下的语句:

double Scal_R;
scanf("%f", &Scal_R);

程序里用输入的这个参数Scal_R控制一个圆的半径比例,比如输入此参数为1.5时,应该将原来圆的半径乘以1.5再重画此圆。但总是没有出现正确结果,也一直没有往这个地方想,郁闷了好一阵子。后来还是看了下谭老的书,才发现原来scanf()的附加格式说明字符里有个"l",用于输入长整型数据(可用%ld,%lo,%lx) 以及double型数据(用%lf或%le) ,可见输入double型数应该用"%lf",于是做了如下试验:

#include <stdio.h>
int main()
{
    double d_ouble;
    scanf("%f", &d_ouble);
    printf("%f\n", d_ouble);
    return 0;
}

运行结果(VC):
=======================================================================
1.5↙
-92559604329505835000000000000000000000000000000000000000000000.000000
=======================================================================

显然没有正确输出, 改为%lf 后:

#include <stdio.h>
int main()
{
    double d_ouble;
    scanf("%lf", &d_ouble);
    printf("%f\n", d_ouble);
    return 0;
}

运行结果:
=======================
1.5↙
1.500000
=======================

OK了,此时的输出也是正确的,%f 可以输出双精度数。当然用%lf 输出也可得到正确结果。

其实在前面的日志中记过这个附加格式说明符([017]scanf格式控制符的完整格式), 只是当时没理解它是用来做什么的, 也没有注意。在此补充:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  字符                        说明
——————————————————————————————————————
   l     用于输入长整型数据(可用%ld,%lo,%lx)以及double型数据(用%lf或%le)
——————————————————————————————————————
   h     用于输入短整型数据(可用%hd, %ho, %hx)
——————————————————————————————————————
  域宽   指定输入数据所占宽度(列数),域宽应为正整数
——————————————————————————————————————
   *     表示本输入项在读入后不赋绐相应的变量
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

阅读(5896) | 评论(9)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册