C语言的EOF

最近对C的EOF比较困惑,就查了下资料,EOF表示文件结束,stdin结束,读写错误出现。

EOF是一个常数 -1.并不是一个字符。

因为所有的字符的ASCII码都大于0,getchar读不到字符的时候,就返回-1了,也就是EOF.

就先讲下stdin的EOF吧。上代码

#include <stdio.h>
#include <stdlib.h>

void main(){
   char ch;
   while((ch=getchar())!=EOF){
                putchar(ch);
   }
   printf("abc");
}

对程序输入111并按下回车(按下回车代表把输入的字符包括回车符送到buffer,getchar()和putchar()才开始执行),输出(111+换行),会出现等待输入的命令行,而不是直接输出abc。因为回车代表的是换行,而不是EOF.

那怎么才能输出abc呢?用window的EOF就好了,也就是CTRL+Z.按了之后,又没有直接输出ABC,为啥嫩?

因为EOF的输出,必须按回车先,再EOF,再回车,才能把abc打印出来,因为EOF是zero-length read。

就是说EOF前面没有输入的时候,EOF才能被读取。

参考资料:

http://stackoverflow.com/questions/31261483/why-ctrl-z-does-not-trigger-eof
http://stackoverflow.com/questions/4358728/end-of-file-eof-in-c
http://stackoverflow.com/questions/5655112/why-do-i-require-multiple-eof-ctrlz-characters

原文地址:https://www.cnblogs.com/wz0107/p/5326701.html