【问题标题】:Printing the value of EOF打印EOF的值
【发布时间】:2014-05-24 11:22:04
【问题描述】:

在 Kernighan 和 Ritchie(C 编程语言)中:

'编写程序打印EOF的值'

我写道:

#include <stdio.h>

main(){

    int c;
    c = getchar();
    if ((c = getchar()) ==  EOF)
        putchar(c);
}

但它没有输出任何东西,为什么?

【问题讨论】:

  • EOF 不是字符,因此putchar(EOF) 可以做任何事情。你想要的是printf("%d", EOF)
  • putchar(EOF) 被定义为表示 putchar( (unsigned char)(EOF) ) (C11 7.21.7.3) ,因此它不能“做任何事情”,它必须输出一些字符。虽然这可能是一个不可打印的字符

标签: c putchar


【解决方案1】:

putchar 函数打印一个字符。

但EOF不是字符,用于表示文件的结束。所以getchar返回一个与字符集有区别的值,表示没有更多的输入。

所以使用 putchar() 打印 EOF 不会打印任何值

将其打印为整数

printf("%d",EOF);

给出结果-1

【讨论】:

  • 我的结果是-1%,为什么大家都说“EOF”的结果不是字符呢?
  • @MichaelElliott EOF 是一个扩展为-1 的宏(它是一个没有对应字符的整数值)。
  • 也就是说,通常是-1,尽管它通常可以是任何负整数
  • @MichaelElliott 而% 是因为您没有打印换行符\n
【解决方案2】:

putchar(c)表示在使用的字符编码(通常为ASCII)中输出与c(为数字)对应的字符。

没有编码为EOF 的字符(这就是EOF 的全部意义)。

“打印EOF的值”的规定并不意味着“打印代码为EOF的字符”(因为没有)。相反,它们很可能意味着在您的系统上打印与EOF 具有相同值的整数。

【讨论】:

    【解决方案3】:

    试试这个:

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

    EOF 不是您预期的可打印字符。

    【讨论】:

    • EOF 甚至不是一个字符
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 2016-06-27
    • 2013-10-23
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多