通过scanf()读取时,double类型的变量不起作用

时间:2016-05-17 19:48:46

标签: c variables double scanf

#include <stdio.h>

int main(){
    double d;

    scanf("%f", &d);
    printf("%f\n\n",  d);

    system("pause");
    return 0;
}

这就是我得到的: std::function

此代码用于读取变量double并将其显示在屏幕上,但它仅显示“0.0 ...”。

如果我只是将变量类型更改为float,它就会完全符合我的要求,但如果我将其设为double则只读取“0”。为什么呢?

1 个答案:

答案 0 :(得分:1)

在您的代码中,

 scanf("%f", &d);

错了。对于scanf()%f期望指向float的指针作为参数。

引用C11,章节§7.21.6.2, fscanf()

  

aefg

     

匹配可选的有符号浮点数,无穷大或NaN,其值为   格式与strtod的主题序列的预期相同   功能。 相应的参数应该是浮动的指针。

如果你想扫描 double,你必须使用

 scanf("%lf", &d);

FWIW,为任何格式说明符传递不兼容的参数类型会调用undefined behavior

引用C11

  

[...]除非用*表示分配抑制,否则   转换结果放在下面第一个参数指向的对象中   尚未收到转换结果的format参数。 如果是这个对象   没有合适的类型,或者无法表示转换结果   在对象中,行为未定义。