我读过丹尼斯·里奇(Dennis Ritchie)的《 C编程语言》一书,该书int
必须用于容纳EOF的变量-使其足够大以使其可以容纳EOF值-不能char
。但是以下代码可以正常工作:
#include<stdio.h>
main() {
char c;
c=getchar();
while(c!=EOF) {
putchar(c);
c=getchar();
}
}
没有更多输入时,getchar
返回EOF。在上面的程序中,c
具有char类型的变量能够成功保存它。
为什么这样做?根据上述书籍中的解释,该代码不起作用。
5
没有EOF字符。
如果您读取带有值的字符,则此代码可能会失败
—
Keith Thompson
0xff
。将结果存储getchar()
在a中int
可以解决该问题。您的问题与comp.lang.c FAQ中的问题12.1基本相同,这是一个很好的资源。(另外,main()
应该是int main(void)
,并且return 0;
在收盘前添加a也不会受到损害}
。)
@delnan:链接的文章关于Unix如何对待control-D不太正确。它不会关闭输入流;它只会导致在控制台上阻塞的任何fread()立即返回所有尚未读取的数据。许多程序将fread()的零字节返回解释为表示EOF,但实际上该文件将保持打开状态并能够提供更多输入。
—
2015年