-1

如果我尝试将 a 打印floatint,则此代码:

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

打印 1073741824,而这段代码:

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

打印 0。

输出是否未定义?还有什么时候%f与整数%d一起使用并与双精度一起使用?

4

4 回答 4

2

来自 C99 标准第7.19.6.1 节的 fprintf 函数

如果任何参数不是相应转换规范的正确类型,则行为未定义。

%d期望 a int,而不是 a float,因此程序具有未定义的行为(包括输出)。

于 2013-05-24T10:00:48.320 回答
2

不仅输出,而且整个程序都有未定义的行为,因为您传递给的值printf()的类型与格式字符串期望的类型不匹配。

于 2013-05-24T09:59:20.583 回答
1

如先前答案中所述,如果打印格式与传递的类型不匹配,则会显示未定义的行为。

如果要将整数视为浮点数,则需要对其进行类型转换。

int j = 5;
printf("%f",(float)(j));

这会将输出打印为 5.0,即作为浮点数

于 2013-05-24T11:05:01.830 回答
0

C 标准规定 printf 格式必须与传入的类型匹配。如果不匹配,则行为明确未定义:

C99, 7.19.6.1 # 9 (fprintf)

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

于 2013-05-24T10:00:37.363 回答