为什么我不能通过此代码获得正确的输出?

时间:2019-09-05 13:33:22

标签: c output

我正在解决一个困扰我一段时间的问题。还是不明白。更改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

2 个答案:

答案 0 :(得分:5)

mint。因此,如果您执行m = (float)m / (2.0);,那么即使(float)m / (2.0)2.5,它也会被截断以m的形式存储在2中。所以当你这样做

printf("%f\n", m);

您的行为不确定,因为它是int,并且您说它是float

稍后您这样做

printf("%0.2f\n",(float)m/2.0);

,您将得到1.0,因为m2,然后将其除以2.0。您可以通过将m的类型改为float来获得预期的输出。

答案 1 :(得分:1)

printf("%f\n", m); // m is int

不。 "%f"int不匹配。

使用"%d"或转换值

printf("%d\n", m);
printf("%f\n", (double)m);

请注意,转换为float会强制第二次自动转换为double

printf("%f\n", (float)m); // convert twice