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

Gan*_*esh 0 c floating-point int printf

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

Vla*_*cow 5

的调用printf具有未定义的行为,因为转换说明符%f与表达式的类型不对应10 / 2,即int。由于表达式的两个操作数10 / 2具有类型int,因此结果也具有类型,int因为它是两个操作数的公共类型。

至少使用代替10.0 / 2。在这种情况下,表达式的类型为double

或输出的整数表达式10 /2使用转换符%d%i类似

printf( "value: %d", 10 / 2 );
Run Code Online (Sandbox Code Playgroud)

根据C标准(7.21.6.1 fprintf函数)

9如果转换规范无效,则行为未定义。275)如果任何参数不是对应转换规范的正确类型,则行为未定义