zoukankan      html  css  js  c++  java
  • C语言中fscanf函数读取double型浮点数的问题

    转自:http://blog.csdn.net/lutx/article/details/5072043

    作者联系方式:Lutx (80437#zj.com)

     

    在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".


  • 相关阅读:
    Nginx 缓存解决方案
    Chrome去水印、自由复制的解决方法
    简单介绍正向代理和反向代理
    Lambda表达式
    项目集成hystrix-dashboard
    hystrix 添加turbine
    GsonUtil 工具类
    idea 去除import * 变成具体引入文件
    eureka 创建服务消费者
    eureka 创建注册服务提供方
  • 原文地址:https://www.cnblogs.com/youngforever/p/3104732.html
Copyright © 2011-2022 走看看