printf()的异常行为?

dar*_*dow 3 c

可能重复:
使用%f打印整数变量

#include<stdio.h>

int main()
{
    printf("%f",9/5);
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

输出:0.000000

任何人都可以解释上述程序的输出吗?

不应该是程序的输出是1.000000?

oua*_*uah 5

printf("%f",9/5);
Run Code Online (Sandbox Code Playgroud)

此语句是未定义的行为,因为参数必须是类型double9 / 5类型int.

使用9 / 5.0有类型的参数double(和正确的浮动师).


Lev*_*von 2

回复:程序的输出不应该是 1.000000 吗?

如果您的除法结果是浮点值而不是int. 由于您尝试int使用 %f格式规范打印 an ,因此结果是未定义的行为。

更多细节:

有两个相关的问题:

  1. int您从除法中得到了一个eger结果,但尝试使用浮点值的格式%f

  2. (您的问题似乎暗示您知道这一点)整数除法会产生一个整数,这就是%f格式说明符不合适的原因。当格式说明符和参数不匹配时,行为是未定义的

    为了避免整数结果,请尝试:

    9.0 / 59 / 5.0什至9.0 / 5.0

    得到您期望的结果,然后说明%f符将是适当的并按预期工作。

    请注意,当进行整数除法时,结果将是另一个整数。但是,如果至少一个操作数是浮点型,则另一个操作数也将提升为浮点型,并且除法将得到浮点值。

    通过整数除法,您会得到截断,这意味着结果的小数部分被丢弃。