本文主要是介绍键盘输入EOF, 为何循环还不停止,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在K&R的C语言教程里看到这段程序,关于输入字母计数的程序,如下:
#include<stdio.h>
void main()
{long coff=0;while(getchar()!=EOF)coff++;printf("%ld\n",coff);
}
代码不复杂,只有在键盘输入EOF键时,循环才会结束。
那么如何才能从键盘输入EOF呢?(我的编程环境是 windows 7 + visual studio 2010)
查了一下资料:
http://bbs.csdn.net/topics/310129688
http://en.wikipedia.org/wiki/End-of-file
发现在Windows 下,输入 ctrl+z 或者F6 键是可以代表EOF的,但是具体的情况有点怪异。
例如输入 “abcd^z 回车” 时,程序还在继续,继续后在新的一行输入 “^z 回车” 时,程序才结束,输出5。
如果输入 “abcd^Z^Z^Z 回车 ^Zefg 回车” , 还是输出5。这说明:
- 第一行内的三个^Z^Z^Z并没有算三次;
- 第二行开头的^Z后面三个字母efg 并没有计算到coff里,也就是说,程序运行到了接收字母e 时,已经跳出了循环
- abcd 四个字母,再加一次回车,所以输出是5 (如果中间输入两次回车,也就是“abcd^Z^Z^Z 回车 回车 ^Zefg 回车”时,输出是6,就说明)
- while循环遇到^Z开头的新的一行就结束了,无论后面有多少字母,这些输入的字母都没有影响到coff的值
归纳一下上述第一个讨论链接的内容,可以大概这样理解EOF:
“在行缓冲里,如果EOF前面还有字符,那么操作系统不会产生EOF,只有前面没有任何字符的时候才会产生。”
然后这是另一个小节,关于putchar()函数的 (待续)
这篇关于键盘输入EOF, 为何循环还不停止的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!