C语言中的getchar()和EOF
来源:互联网 发布:淘宝网女士羊毛衣 编辑:程序博客网 时间:2024/06/05 05:07
在C语言的字符处理程序中,经常会用到一个字符输入函数getchar(),此函数的说明中说函数是以字符为单位读取的,但实际情况是读到一个换行符或者是文件结束符EOF时才进行一次输出,对这个问题的一个解释是,在大师编写C的时候,当时并没有所谓终端输入的概念,所有的输入实际上都是按照文件进行读取的,文件中一般都是以行为单位的。因 此,只有遇到换行符,那么程序会认为输入结束,然后采取执行程序的其他部分。同时,输入是按照文件的方式存取的,那么要结束一个文件的输入就需用到EOF (End Of File). 这也就是为什么getchar结束输入退出时要用EOF的原因。
当用getchar进行输入时,如果输入的第一个字符为有效字符(即输入是文件结束符EOF,Windows下为组合键Ctrl+Z, Unix/Linux下为组合键Ctrl+D),那么只有当最后一个输入字符为换行符'\n'(也可以是文件结束符EOF,EOF将在后面讨论)时, getchar才会停止执行,整个程序将会往下执行。
getchar()有一个int型的返回值.当程序调用getchar()时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).
关于文件结束符EOF的问题:
EOF虽然是文件结束符,但并不是在任何情况下输入Ctrl+D(Windows下Ctrl+Z)都能够实现文件结束的功能,只有在下列的条件下,才作为文件结束符。
(1)遇到getcahr函数执行时,要输入第一个字符时就直接输入Ctrl+D,就可以跳出getchar(),去执行程序的其他部分;
(2)在前面输入的字符为换行符时,接着输入Ctrl+D;
(3)在前面有字符输入且不为换行符时,要连着输入两次Ctrl+D,这时第二次输入的Ctrl+D起到文件结束符的功能,至于第一次的Ctrl+D的作用将在下面介绍。
其实,这三种情况都可以总结为只有在getchar()提示新的一次输入时,直接输入Ctrl+D才相当于文件结束符。
EOF作为行结束符时的情况,这时候输入Ctrl+D并不能结束getchar(),而只能引发getchar()提示下一轮的输入。
这种情况主要是在进行getchar()新的一行输入时,当输入了若干字符(不能包含换行符)之后,直接输入Ctrl+D,此时的Ctrl+D并不是文件 结束符,而只是相当于换行符的功能,即结束当前的输入。
EOF的作用也可以总结为:当终端有字符输入时,Ctrl+D产生的EOF相当于结束本行的输入,将引起getchar()新一轮的输入;当终端没有字符 输入或者可以说当getchar()读取新的一次输入时,输入Ctrl+D,此时产生的EOF相当于文件结束符,程序将结束getchar()的执行。
- C语言中的getchar()和EOF
- C语言 getchar()与EOF
- C语言getchar()与EOF小谈
- c语言中的getchar()和putchar()
- C语言中的getchar和putchar详解
- C语言中的getchar和putchar详解
- C语言中的getchar和putchar详解
- 《c和指针》笔记--getchar()与EOF
- C语言中的EOF和feof()
- C语言中的EOF和feof()
- C语言中的EOF和feof()
- C语言中的EOF和feof()
- C语言中的EOF
- C语言中的EOF
- getchar()和EOF总结
- getchar()和EOF总结
- getchar()和EOF总结
- getchar()和EOF总结
- Android APK反编译就这么简单 详解(附图)
- Java EE 安装mysql连接以及相关配置
- java:File.deleteOnExit()实现分析塈用于多级目录时的讲究
- Qt之根据扩展名获取文件图标、类型
- Qt: GIF图片播放器(QMovie类)
- C语言中的getchar()和EOF
- 源码编译RPM包
- iOS使用Zbar扫描二维码
- JAVASCRIPT高性能执行和加载(阻塞特性)
- Java注释规范整理
- Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead.
- git上传代码
- [UnityShader3]序列帧遮罩效果
- 设计模式-建造者模式