C - EOF中的EndOfFile

Chr*_*_45 0 c

你用什么来结束程序,-1,不起作用:

#include <stdio.h>
//copy input to output
main() {
    char c;
    c = getchar();
    while(c != EOF) {
        putchar(c);
        c = getchar();
    }
}
Run Code Online (Sandbox Code Playgroud)

rah*_*hul 10

宏:int EOF

此宏是一个整数值,由许多函数返回以指示文件结束条件或某些其他错误情况.使用GNU库,EOF为-1.在其他库中,其值可能是其他一些负数.


CB *_*ley 5

该文档getchar是它返回下一个可用的字符,强制转换为a unsigned char然后以int返回值返回.

这样做的原因是为了确保所有有效字符都作为正值返回,并且不会比较等于EOF一个评估为负整数值的宏.

如果你将返回值getchar放入a char,那么根据你的实现char是签名还是未签名,你可能会得到虚假检测EOF,或者你EOF甚至可能永远都不会检测到.

EOF当从文件或管道进程重定向程序的输入时,通常会自动发送到C库的信号.交互式地取决于您的终端和shell,但通常在unix上使用Ctrl-D和单独的Windows Ctrl-Z实现.