【转载】fscanf和fprintf函数从文件中格式化读取double型数据


【转载】fscanf和fprintf函数从文件中格式化读取double型数据


C语言中fscanf函数读取double型浮点数的问题点击打开转载链接1)

在C语言里面, 将一个浮点数输出到文件中, 可以使用符号%f, 如

double a = 0.0;
fprintf(fp, "a = %f", a); 

而如果要从文件中读取一个double类型的浮点数, 就不能用%f, 而要用%lf才可以. 如 

double a;
float b;
fscanf(fp, "%f", &a);  // 这里得到的a的数值不是所期望的值
fscanf(fp, "%lf", &a); // 正确
fscanf(fp, "%f", &b);  // 正确 
追究一下原因, 是因为格式符"%f"指示的是一个float类型(4个字节), 而我们给的指针位置(&a)是一个双精度(double)类型, 占8个字节, 这样在上面的第一个fscanf语句中, 实际上把a当初float类型, 也就是只填了8个字节的前4个字节, 而后面的4个字节并没变, 这样变量a的数据就不是一个正确的值.而格式符"%lf"利用修饰符l来表示这是一个长类型的浮点数(即双精度), 所有会得到正确的值.
而我们通常在程序中习惯定义浮点数为double类型, 所以在scanf函数中要谨慎使用"%f", 而应该使用"%lf".

注意:

fprintf处理double型数据时也要用“%lf”,用“%f”可能输出的值不正确或者无法输出想要的值。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值