#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”。为什么呢?
答案 0 :(得分:1)
在您的代码中,
scanf("%f", &d);
错了。对于scanf()
,%f
期望指向float
的指针作为参数。
引用C11
,章节§7.21.6.2, fscanf()
a
,e
,f
,g
匹配可选的有符号浮点数,无穷大或NaN,其值为 格式与strtod的主题序列的预期相同 功能。 相应的参数应该是浮动的指针。
如果你想扫描 double
,你必须使用
scanf("%lf", &d);
FWIW,为任何格式说明符传递不兼容的参数类型会调用undefined behavior。
引用C11
,
[...]除非用*表示分配抑制,否则 转换结果放在下面第一个参数指向的对象中 尚未收到转换结果的format参数。 如果是这个对象 没有合适的类型,或者无法表示转换结果 在对象中,行为未定义。