可能重复:
使用%f打印整数变量
#include<stdio.h>
int main()
{
printf("%f",9/5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:0.000000
任何人都可以解释上述程序的输出吗?
不应该是程序的输出是1.000000?
printf("%f",9/5);
Run Code Online (Sandbox Code Playgroud)
此语句是未定义的行为,因为参数必须是类型double且9 / 5类型int.
使用9 / 5.0有类型的参数double(和正确的浮动师).
回复:程序的输出不应该是 1.000000 吗?
如果您的除法结果是浮点值而不是int. 由于您尝试int使用 %f格式规范打印 an ,因此结果是未定义的行为。
更多细节:
有两个相关的问题:
int您从除法中得到了一个eger结果,但尝试使用浮点值的格式%f
(您的问题似乎暗示您知道这一点)整数除法会产生一个整数,这就是%f格式说明符不合适的原因。当格式说明符和参数不匹配时,行为是未定义的。
为了避免整数结果,请尝试:
9.0 / 5或9 / 5.0什至9.0 / 5.0
得到您期望的结果,然后说明%f符将是适当的并按预期工作。
请注意,当进行整数除法时,结果将是另一个整数。但是,如果至少一个操作数是浮点型,则另一个操作数也将提升为浮点型,并且除法将得到浮点值。
通过整数除法,您会得到截断,这意味着结果的小数部分被丢弃。