【问题标题】:Output EOF using %f使用 %f 输出 EOF
【发布时间】:2015-06-09 12:19:10
【问题描述】:
#include<stdio.h>
int main()
{
    printf("%d",EOF);
}

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

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

产生 0.000 。当预期输出为 -1.000 时,有人如何解释这一点?

【问题讨论】:

    标签: c io printf eof format-specifiers


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 大多数编译器都可以警告你(例如,使用gcc -Wall编译有问题的代码)
    【解决方案2】:

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

    【讨论】:

    • @YuHao 是的,我认为你是对的。我不记得在哪里,但我在某处看到使用%d 打印 EOF。我相信这是正确的(没有人反对)。
    • @YuHao;对不起。那是错字。我的意思是signed 当然。
    猜你喜欢
    • 2019-04-30
    • 2017-02-03
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2012-11-15
    相关资源
    最近更新 更多