如果我尝试将float
打印为int
,则此代码为:
main () {
float a = 6.8f;
printf("%d", a);
}
打印1073741824,而此代码:
main () {
float a = 9.5f;
printf("%d", a);
}
打印0。
输出是否未定义?同时,%f
与整数一起使用,%d
与double一起使用吗?
答案 0 :(得分:2)
不仅输出,而且整个程序都有未定义的行为,因为传递给printf()
的值的类型与格式字符串所期望的类型不匹配。
答案 1 :(得分:2)
来自C99标准部分 7.19.6.1 fprintf函数:
如果任何参数不是相应转换规范的正确类型,则行为未定义。
%d
需要int
,而不是float
,因此程序具有未定义的行为(包括输出)。
答案 2 :(得分:1)
如前面的答案中所述,如果打印格式与传递的类型不匹配,则会显示未定义的行为。
如果要将整数视为float,则需要对其进行类型转换。
int j = 5;
printf("%f",(float)(j));
这将打印输出为5.0,即浮点数
答案 3 :(得分:0)
C标准说printf格式必须与传入的类型匹配。如果没有,则行为明确未定义:
C99,7.19.6.1#9(fprintf)
如果转换规范无效,则行为为 undefined .239)如果任何参数不是正确的类型 相应的转换规范,行为未定义。