getchar()与EOF的疑问。
最近从头开始看c程序设计语言,学到getchar和EOF这就不太明白了。书中有两段小程序。程序代码:
#include<stdio.h> void main() { int c; c=getchar(); while(c!=EOF) { putchar(c); c=getchar(); } }
这个程序的功能是复制键盘上的输入,没有任何问题。
程序代码:
#include<stdio.h> void main() { long nc; nc=0; while(getchar()!=EOF) ++nc; printf("%ld\n",nc); }
这个程序是统计键盘输入的个数,但是我不太明白。运行程序,例如输入“ly”敲回车,没有反应,输入“ly^Z(ctrl+Z,据说是输入EOF)”没有反应,输入“ly^Z”敲一下回车再输入“^Z”再敲一下回车,这时候才有输出“3”。
当我把第二段程序中“getchar()!=EOF”改成“getchar()!=10”的时候输入“ly”敲一下回车,输出“2”。这样反而是我想要程序,这到底是怎么回事?
第一个程序正常说明在没有输入时getchar会返回EOF,但是第二个程序明明已经没有输入了却不能跳出循环,输入ctrl+z给它EOF也没用,必须要EOF+回车才能跳出循环,而且似乎回车也占了计数(我用的是vs2010)。往各位大侠解惑!