![](/img/trans.png)
[英]Why does printf output random values for double and 0.000000 for int?
[英]Why does printf(“value: %f”,10/2); output 0.000000?
我知道整数算术将截断分数,但在这里它至少应打印5。为什么打印0.000000
?
调用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) 如果任何参数不是对应转换说明的正确类型,则行为未定义 。
10
和2
不是有效的float
。 它们是int
。
要使程序打印正确的输出,请执行以下操作:
printf("value:%f",10./2.);
请注意.
每个数字之后。 这向编译器表示该数字是浮点数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.