zoukankan      html  css  js  c++  java
  • printf()的格式

    问:有人告诉我不能在printf中使用%lf。为什么printf()用%f输出double型,而scanf却用%lf呢?

    答:printf的%f说明符的确既可以输出float型又可以输出double型。根据“默认参数提升”规则(在printf这样的函数的可变参数列表中,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。参见问题15.2。

    对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向float存储和向double存储大不一样,因此,scanf区别%f和%lf。

    下表列出了printf和scanf对于各种格式说明符可以接受的参数类型。

    格  式

    printf

    scanf

    %c

    int

    char *

    %d, %i

    int

    int *

    %o, %u, %x

    unsigned int

    unsigned int *

     

     

     

    %ld, %li

    long int

    long int *

    %lo, %lu, %lx

    unsinged long int

    unsigned long int *

    %hd, %hi

    int

    short int *

    %ho, %hu, %hx

    unsigned int

    unsigned short int *

    %e, %f, %g

    double

    float *

    %le, %lf, %lg

    n/a

    double *

    %s

    char *

    char *

    %[...]

    n/a

    char *

    %p

    void

    void **

    %n

    int *

    int *

    %%

    none

    none

    (严格地讲,%lf在printf下是未定义的,但是很多系统可能会接受它。要确保可移植性,就要坚持使用%f。)

  • 相关阅读:
    第一阶段冲刺(第六天)
    第一阶段冲刺(第五天)
    第一阶段冲刺(第四天)
    第一阶段冲刺(第三天)
    第一阶段冲刺(第二天)
    个人学习进度(第十一周)
    第一阶段冲刺(第一天)
    个人学习进度(第十周)
    个人学习进度(第九周)
    php面向对象说明
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3032053.html
Copyright © 2011-2022 走看看