最近对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