为什么printf(“ value:%f”,10/2);输出0.000000?

时间:2019-07-06 12:38:29

标签: c floating-point int printf

我知道整数算术将截断分数,但是在这里它至少应打印5。为什么打印0.000000

2 个答案:

答案 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)

102无效float。它们是int

要使程序打印正确的输出,请执行以下操作:

printf("value:%f",10./2.);

在每个数字后注意.。这向编译器表示该数字是浮点数。