打印EOF的值

12

在 Kernighan 和 Ritchie 的《C程序设计语言》中:

'编写一个程序以打印 EOF 的值'

我写了:

#include <stdio.h>

main(){

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

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


8
EOF不是一个字符,因此putchar(EOF)可以做任何事情。您需要的是printf("%d", EOF) - Konrad Borowski
putchar(EOF) 的定义是 putchar((unsigned char)(EOF)) (C11 7.21.7.3),因此它本身并不能“做任何事情”,必须输出一些字符。尽管这可能是一个不可打印的字符。 - M.M
3个回答

19

putchar函数用于打印字符。

但是EOF不是一个字符,而是用于表示文件结束的标志。因此,getchar返回一个可区分于字符集的值,以指示输入的结束。

因此,使用putchar()打印EOF将不会打印任何值。

以整数形式打印它。

printf("%d",EOF);

给出结果-1


我的程序结果显示为**-1%**,为什么大家都说“EOF”不是一个字符,但结果却是这样? - Michael Elliott
3
EOF 是一个宏,它会扩展为 -1(这是一个没有对应字符的整数值)。 - M.M
1
通常情况下,它会返回-1,尽管一般来说它可能是任何负整数。 - M.M
@MichaelElliott 而且 % 是因为你没有打印换行符 \n - Andy Sukowski-Bang

9

putchar(c) 的意思是输出与 c (一个数字)对应的字符编码(通常为ASCII)中的字符。

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

“打印EOF的值”的规定并不意味着“打印其代码为 EOF 的字符”(因为不存在这样的字符)。相反,他们最可能指的是在您的系统上打印与 EOF 相同值的整数。


6

试试这个:

#include <stdio.h>

int main(){
    printf("EOF: %d\n", EOF);
}

EOF不是你所期望的可打印字符。


9
EOF不是一个字符。 - Mohit Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接