【发布时间】:2016-01-28 15:11:38
【问题描述】:
所以今天我的班主任给了我们3个问题,并说要在家研究..我努力得到解决方案。但是没有关于它的确切文章。
代码是:
#include <stdio.h>
int main(void){
double x = 2.3;
printf("%d\n", x);
printf("%d, x\n");
printf("%d\n", "x");
}
输出是:
- 1717986918
- 1717986918, x
- 4206639
我知道我需要将 %lf 用于双精度。但是我想知道当我使用 %d 时出现了什么问题。 我认为存在内存问题(4 位到 8 位)或垃圾。但我想了解有关该问题的更多详细信息。这是一项任务。 TIA
【问题讨论】:
-
你做了一件明显错误的事。你的老师知道这是错误的。你知道这是错的。果然,你的程序出错了。 UB,QED。
-
您错误地认为需要将
%lf用于double,尽管您需要将%Lf用于long double。 (float没有printf转换说明符,因为用作printf的可选参数之一的float类型的值被默认参数提升自动转换为double.)