似乎C和我在这里的预期输出上存在分歧。
我有:
struct r_struct {
int r_i;
float r_f, r_f2;
};
struct r_struct r;
r.f = 100.0;
[...]
printf("f is A:%f B:%d, C:%d, D:%d\n", r.f, r.f, r.f_lhzr / 1, (int)r.f);
我得到以下输出:
f is A:100.000000 B:0, C:1079574528, D:0
我期望得到此输出,因为浮点数应以所有三种方式强制转换为整数:
f is A:100.000000 B:100, C:100, D:100
有人可以解释一下吗?
根据的规范printf()
,例如https://en.cppreference.com/w/cpp/io/c/fprintf
如果默认转换后的任何参数不是相应的转换说明符所期望的类型,或者参数的数量少于format所要求的数量,则该行为是undefined。
您有浮点值,并且只将其强制转换为int
。
您可以"%d"
对浮点数使用说明符,即对于所有输出和任何其他行为(不仅对于非强制值),任何可预测或可解释的行为都将结束。
(speficier和type之间的对比已由SomeProgrammerDude在注释中指出。我在此处参考spec添加了UB方面。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句