青骆 发表于 2018-3-24 20:56:36

关于printf 怎么计算的问题

不知道那里有问题输出的结果是0;
贴上我的源码;
#include <stdio.h>
int main(void)
{
        double a;
        printf("请输入杯数:");
        scanf("%f",&a);
        printf("\n品脱数是:%f,盎司数是:%f,大汤勺数:%f,茶勺数:%f",a/2,a*8,a*8*2,a*8*2*3);
        return 0;
}

ba21 发表于 2018-3-24 21:21:11

#include <stdio.h>
int main(void)
{
      double a;
      printf("请输入杯数:");
      scanf("%lf",&a);
      printf("\n品脱数是:%f,盎司数是:%f,大汤勺数:%f,茶勺数:%f",a/2,a*8,a*8*2,a*8*2*3);
      return 0;
}

Zmynx_2017 发表于 2018-3-24 21:24:08

scanf("%f",&a);把这个改为scanf("%lf",&a);

就好了

青骆 发表于 2018-3-24 22:09:40

Zmynx_2017 发表于 2018-3-24 21:24
scanf("%f",&a);把这个改为scanf("%lf",&a);

就好了

为什么不能%f超出范围的话我用很小的数字试了也不行, 我就比较想知道原理是什么

Zmynx_2017 发表于 2018-3-24 22:27:33

青骆 发表于 2018-3-24 22:09
为什么不能%f超出范围的话我用很小的数字试了也不行, 我就比较想知道原理是什么

不是超出范围的问题,如果你是float你可以使用lf,但是使用double,你就只能使用lf而不能使用 %f

在用于输出时:
float类型可以使用%lf格式,但不会有任何好处。
double类型如果使用了%f格式可能会导致输出错误。

在用于输入时:
double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。

至于原理这个我也不太清楚,这个就跟说为什么是%f,而不是%h,%y
这个你要是愿意研究你可以看看C语言内置的函数什么的是怎么写的,

一般你记住就好了。

jia2563422 发表于 2018-3-24 22:34:32

http://bbs.fishc.com/thread-67265-1-1.html

请参考取值范围这个帖子。

double 是占用8个字节,
float 占用4个字节,
您这样用,放不下啊, 所以再小的数也会错误。

页: [1]
查看完整版本: 关于printf 怎么计算的问题