【发布时间】:2014-03-23 02:54:43
【问题描述】:
我知道这是一个简单的问题,但它是在我编码时出现的,我想知道它现在是如何工作的。所以,我的第一个问题是,当 printf 给出一个如下所示的整数,但期望 %f 浮点值时,为什么它总是输出 0.000000?我在 linux 终端上的 GCC 中运行它。
int main() {
int a = 2, b = 5, result = 0;
result = b/a*a;
printf("%f\n", result);
}
//Above printf statement outputs 0.000000 every time.
然后,当我使用下面的代码并在 printf 期望 %i 整数值时给它一个 double 时,输出始终是随机/垃圾。
int main() {
double a = 2, b = 5, result = 0;
result = b/a*a;
printf("%i\n", result);
}
//Above printf statement outputs random numbers every time.
我完全理解上面的代码是不正确的,因为 printf 输出类型与我输入的不同,但我希望它对每种形式的错误采取相同的方式,而不是像这样改变。只是引起了我的好奇心,所以我想我会问。
【问题讨论】:
-
@Dinesh
int a = 2, b = 5, result = 0; -
这可能会满足你的好奇心:stackoverflow.com/questions/2398791/…
-
printf("%f\n", ...);导致0.000000或-0.000000大约占所有可能double的50%。有很多小的double。在研究 UB 时使用printf("%a\n", ...);或printf("%e\n", ...);可以获得更多信息。