任何人都可以解释输出

时间:2013-05-24 09:56:59

标签: c floating-point double output undefined-behavior

如果我尝试将float打印为int,则此代码为:

main () {                         
    float a = 6.8f;                      
    printf("%d", a);                      
}                       

打印1073741824,而此代码:

main () {            
    float a = 9.5f;           
    printf("%d", a);            
}                   

打印0。

输出是否未定义?同时,%f与整数一起使用,%d与double一起使用吗?

4 个答案:

答案 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)如果任何参数不是正确的类型   相应的转换规范,行为未定义。