【发布时间】:2021-02-07 07:58:42
【问题描述】:
#include <stdio.h>
int main()
{
double a=7.1;
printf("%d",a);
return 0;
}
输出:
1717986918
当我编写这个程序并使用签名格式说明符到方法printf() 时。为什么我会得到这个值?
【问题讨论】:
-
使用转换说明符
"%d"打印double值是未定义的行为。什么事情都可能发生。例如,您的程序可能会崩溃...或格式化您的硬盘驱动器...或鼻守护程序可能会出现(另一个选项是您的程序将双精度值7.1的位序列解释为整数的位序列1717986918忽略任何剩余位(如果有) -
所以
%f或%lf说明符就是您所需要的。 -
使用编译器警告标志总是一个好主意。