【发布时间】:2023-03-11 05:29:01
【问题描述】:
我正在解决一个困扰我一段时间的问题。还是无法理解。更改m的类型是有道理的,但是我仍然无法理解m在这个过程中经历了什么。它的价值如何变化?
下面是代码。
我已经在代码块上试过了。
#include<stdio.h>
int main()
{
int m=5;
m = (float)m / (2.0);//There, shouldn't m be 2.500000?
printf("%f\n", m);
printf("%0.2f\n",(float)m/2.0);
getchar();
return 0;
}
预期结果:
2.500000 1.25
实际结果:
nan 1.00
【问题讨论】:
-
请下次正确格式化您的代码。我现在为你做了这件事,从现在开始请你自己做。
-
@clockstream 这个调用 printf("%f\n", m);具有未定义的行为,因为对 int 类型的对象使用了错误的格式转换说明符 %f,
-
m的类型为int。为其分配float或double值不会改变这一点 - 在分配之前,该值将转换为int。 C 中的变量永远不会改变它们的类型。 -
整数是整数,浮点数是浮点数。如果您尝试将浮点数存储在整数中,则变量的类型不会神奇地改变。相反,所有小数都将被删除。
-
@bolov 非常感谢。我正在学习如何去做。