在 Kernighan 和 Ritchie 的《C程序设计语言》中:
'编写一个程序以打印 EOF 的值'
我写了:
#include <stdio.h>
main(){
int c;
c = getchar();
if ((c = getchar()) == EOF)
putchar(c);
}
但它没有输出任何东西,为什么?
putchar函数用于打印字符。
但是EOF不是一个字符,而是用于表示文件结束的标志。因此,getchar返回一个可区分于字符集的值,以指示输入的结束。
因此,使用putchar()打印EOF将不会打印任何值。
以整数形式打印它。
printf("%d",EOF);
给出结果-1
EOF
是一个宏,它会扩展为 -1
(这是一个没有对应字符的整数值)。 - M.M%
是因为你没有打印换行符 \n
。 - Andy Sukowski-Bangputchar(c)
的意思是输出与 c
(一个数字)对应的字符编码(通常为ASCII)中的字符。
没有字符被编码为 EOF
(这就是 EOF
的全部含义)。
“打印EOF的值”的规定并不意味着“打印其代码为 EOF
的字符”(因为不存在这样的字符)。相反,他们最可能指的是在您的系统上打印与 EOF
相同值的整数。
试试这个:
#include <stdio.h>
int main(){
printf("EOF: %d\n", EOF);
}
EOF
不是你所期望的可打印字符。
EOF
不是一个字符,因此putchar(EOF)
可以做任何事情。您需要的是printf("%d", EOF)
。 - Konrad Borowskiputchar(EOF)
的定义是putchar((unsigned char)(EOF))
(C11 7.21.7.3),因此它本身并不能“做任何事情”,必须输出一些字符。尽管这可能是一个不可打印的字符。 - M.M