double类型用scanf函数时格式符%f和%lf不一样结果?有没有懂得解释一下

清梦2020 2021-02-26 02:05:55
我在用scanf函数的时候,double类型的格式符我一直认为%f和%lf一样的效果呢。

下面我是我测试的一段代码:


如果用%f的话,则输入的数值不对;

如果scanf函数用%lf,结果就是对的;


这是为什么呢?我看别的回答,double类型都让用%f就行。

我使用的编译器是DEVC++ 5.11.
...全文
1331 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
mymtom 2021-03-03
  • 打赏
  • 举报
回复
scanf: %f - float, %lf - double
printf 在 C89 里 %f, float 类型会自动转为 double, C89里面是没有 %lf 的。

https://en.cppreference.com/w/c/io/fscanf
https://en.cppreference.com/w/c/io/fprintf
  • 打赏
  • 举报
回复
%f是float单精度,%lf是double双精度的,所以计算结果不同
从善若水 2021-02-26
  • 打赏
  • 举报
回复
double就是要使用 %lf的
float使用 %f
不要纠结为什么。

想想double使用 %d能对吗?
你现在的问题就 类似 “ double类型变量,使用scanf函数时格式符%d,为什么错误了?”

没有为什么,就是用错了
赵4老师 2021-02-26
  • 打赏
  • 举报
回复
#include <stdio.h>
int main() {
    float   f=1.234567f;
    double lf=1.234567890123456;
    printf("%f ,%.15lf\n",f,lf);//1.234567 ,1.234567890123456
    printf("%f ,%.15f \n",f,lf);//1.234567 ,1.234567890123456
    printf("%lf,%.15lf\n",f,lf);//1.234567,1.234567890123456

    char s[]="1.234567890123456";
    f =0.0f;sscanf(s,"%f" ,& f); printf("%f    \n", f);//1.234568
    lf=0.0 ;sscanf(s,"%lf",&lf); printf("%.15lf\n",lf);//1.234567890123456
    lf=0.0f;sscanf(s,"%f" ,&lf); printf("%.15lf\n",lf);//0.000000000000000
    f =0.0 ;sscanf(s,"%lf",& f); printf("%f    \n", f);//70.175720

    return 0;
}
//根据以上运行结果可得:printf时,%lf和%f可以混用,scanf时不行。
xian0-666 2021-02-26
  • 打赏
  • 举报
回复
https://blog.csdn.net/weixin_44997886/article/details/102812153 参考
xian0-666 2021-02-26
  • 打赏
  • 举报
回复
你定义的double,scanf就得用lf,浮点数本就很麻烦,看堆栈调试
xian0-666 2021-02-26
  • 打赏
  • 举报
回复
虽然都是浮点数,%f代表单精度浮点型数据(float),%lf代表双精度浮点型数据(double),怎么可能一样呢。单精度浮点数有效数字保证6位,部分7位,双精度浮点数有效数字保证15位,部分16位。单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38,双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308
自信男孩 2021-02-26
  • 打赏
  • 举报
回复
既然测试了,验证了,那说明别人说的可能局限于编译器,要么就是别人说的有问题~
自信男孩 2021-02-26
  • 打赏
  • 举报
回复
double输入的是8字节的,float是4字节的。输出用%f没问题,可能是类型提升了。

69,382

社区成员

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

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