使用%f输出EOF

时间:2015-06-09 12:19:10

标签: c io printf eof format-specifiers

#include<stdio.h>
int main()
{
    printf("%d",EOF);
}

生成-1,这完全没问题,但是

#include<stdio.h>
int main()
{
    printf("%f",EOF);
}

产生0.000。当预期输出为-1.000时,有人能解释这个吗?

2 个答案:

答案 0 :(得分:5)

printf()中的任何特定参数使用错误的格式说明符会调用undefined behaviour

EOF的类型为int。您只能将%d用于int类型变量。

FWIW,如果你想要一个int的浮点表示,你必须cast变量(但我个人建议避免这个)

printf("%f",(float)EOF);

答案 1 :(得分:5)

EOF属于intsigned)类型。您不应该使用错误的格式说明符来打印int,否则它将调用未定义的行为。