主要在看K&R的The C Programming Language,对于1.5节“字符输入/输出”理解不透,getchar的原理没有搞清楚,EOF的值知道是-1,但是对于
int c;
while ((c = getchar()) != EOF)
putchar(c);
每输入一行,回车一下,会输出上一行内容,不知道什么时候才能结束。最傻的方法是,输入-1,当然程序还是没有结束。
后来查资料,才发现对于getchar(),一般都会有两点总结,先附上。
一、getchar()的两点总结
1. getchar()是以行为单位进行存取的。
当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入不是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'/n'(也可以是文件结束符EOF,EOF将在后面讨论)时, getchar才会停止执行,整个程序将会往下执行。
例如,上面的代码,就是自己输入时出出现的情况,每输入一行,再按回车,就会输出相应的内容。
这里不能忘了,系统输出时,还有一个”回车符“,这也是为什么我们看到新的输入提示符出现在新的一行,这是回车符的效果。从另外一点也能反应这个问题,就是书上1.5.2讲的”计算字符的个数“,我们会发现总个数是加上回车符个数的。