我知道整数算术将截断分数,但是在这里它至少应打印5。为什么打印0.000000
?
答案 0 :(得分:5)
对printf
的调用具有未定义的行为,因为转换说明符%f
与表达式10 / 2
的类型int
不对应。由于表达式10 / 2
的两个操作数的类型为int
,因此结果的类型为int
,因为它是两个操作数的共同类型。
至少使用10.0 / 2
。在这种情况下,表达式的类型为double
。
或使用转换说明符10 /2
或%d
像这样输出整数表达式%i
printf( "value: %d", 10 / 2 );
根据C标准(7.21.6.1 fprintf函数)
9如果转换规范无效,则行为是 275)如果任何参数不是该参数的正确类型 相应的转换规范,其行为是不确定的。
答案 1 :(得分:1)
10
和2
无效float
。它们是int
。
要使程序打印正确的输出,请执行以下操作:
printf("value:%f",10./2.);
在每个数字后注意.
。这向编译器表示该数字是浮点数。