在c++11标准中 , 是不是无法使用printf输出double类型

qte_acm 2014-06-14 09:32:52
例如:

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
double x = 1.23;
printf("%lf\n" , x);
return 0;
}



输出是:0.000000


...全文
951 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
FrankHB1989 2014-06-23
  • 打赏
  • 举报
回复
引用 1 楼 lin5161678 的回复:
C++没有 stdio.h 应该是 cstdio 注意没有 .h
ISO C++ Annex C仍然保证提供.h,只不过使用是deprecated。
引用 12 楼 zengchenacmer 的回复:
我用的是code blocks编译器 把
printf("%lf\n" , x);
改成
printf("%f\n" , x);
就没问题了 , 我记得如果是double 不是应该用%lf吗?
Code::Blocks什么时候成了编译器了。 如果用的是MinGW,用的M$VCRT不支持很正常。
FrankHB1989 2014-06-23
  • 打赏
  • 举报
回复
ANSI C89/ISO C90的fprintf只支持%f。%lf算是某些实现的扩展,实际上就是UB。注意跟fscanf不一样。 ISO C99规定这里的%lf意义同%f。 ISO C++98/03用的是C90。 ISO C++11用的是C99。 所以这里符合ISO C++03但不符合ISO C++11。
天之骄子呃 2014-06-22
  • 打赏
  • 举报
回复
我试了也正常
qte_acm 2014-06-22
  • 打赏
  • 举报
回复
我用的是code blocks编译器 把
printf("%lf\n" , x);
改成
printf("%f\n" , x);
就没问题了 , 我记得如果是double 不是应该用%lf吗?
赵4老师 2014-06-16
  • 打赏
  • 举报
回复
-lm了吗?
unituniverse2 2014-06-16
  • 打赏
  • 举报
回复
不管是vc2013还是gcc都可以正常输出。 不知道楼主的情况了。。。
lm_whales 2014-06-16
  • 打赏
  • 举报
回复
1)1f 还是lf 1234 的1,还是 lmn的 l
2)编译选项的配置
C,C++居然没有让 格式化输出的 %f,%lf ,Lf成为标准
所以 输出格式有不同的对应关系
      float ,double ,long double
1)       %f   ,%lf         ,%Lf
2)       %hf, %f          ,%lf
3)        %f ,%f           ,%lf          //float ,double  都是%f   long double %lf
4)        %f,%f           ,%Lf         //float ,double  都是%f,long double %Lf
...........................
这几种组合 在 code ::blocks 中的 minGw 编译器中都可以通过编译环境配置,让他们支持。
超级能量泡泡 2014-06-16
  • 打赏
  • 举报
回复
引用 9 楼 daiweifeng 的回复:
楼主,是"%1f",不是"%lf",是数字1,不是字母l
试了一下好像也不行耶,看来八成是编译器的问题。
超级能量泡泡 2014-06-16
  • 打赏
  • 举报
回复
楼主,是"%1f",不是"%lf",是数字1,不是字母l
SoulLove-晨曦 2014-06-15
  • 打赏
  • 举报
回复
我使用的VS2013编译器,C++11标准 可以正常输出呀 你的编译器赶紧扔掉吧 换成VS,免得被误导了
unituniverse2 2014-06-15
  • 打赏
  • 举报
回复
引用 3 楼 zengchenacmer 的回复:
也不行啊 这时我运行的结果: 0.000000 0.00000000000000000000 0 0.000000 0.00000000000000000000 0 Process returned 0 (0x0) execution time : 0.554 s Press any key to continue.
这编译器可以扔了。。。
unituniverse2 2014-06-15
  • 打赏
  • 举报
回复
引用 楼主 zengchenacmer 的回复:
例如:

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
    double x = 1.23;
    printf("%lf\n" , x);
    return 0;
}

输出是:0.000000
要指明精度才行。试试下面这些吧,我就不贴结果了:

    double x = 3.1415926535897932, y = 1.23;

    printf("%lf\n", x);
    printf("%.20lf\n", x);
    printf("%.20lg\n", x);
    printf("%lf\n", y);
    printf("%.20lf\n", y);
    printf("%.20lg\n", y);
  • 打赏
  • 举报
回复
编译器问题吧,lz用的那个版本的编译器
qte_acm 2014-06-15
  • 打赏
  • 举报
回复
也不行啊 这时我运行的结果: 0.000000 0.00000000000000000000 0 0.000000 0.00000000000000000000 0 Process returned 0 (0x0) execution time : 0.554 s Press any key to continue.
lin5161678 2014-06-14
  • 打赏
  • 举报
回复
C++没有 stdio.h 应该是 cstdio 注意没有 .h

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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