文档章节

getchar()和EOF总结

YHZhu
 YHZhu
发布于 2010/07/07 08:51
字数 1468
阅读 198
收藏 1

getchar()EOF总结

师级经典的著作,要字斟句酌的去,去理解。以前在看K&RThe C Programming Language(SecondEdition)
1.5的字符/出,被getchar()EOF所迷惑了。可能主要是由于没有搞清楚getchar()的工作原理和EOF的用法。因此,很有必要总结一下,不然,很多碎的知长时间过后就会淡忘的,只有写下来才是最好的方法。


getchar()最典型的程序也就几行代而已。本人所用的境是DebianGNU/Linux,在其他系下也一
一、getchar的两点总结
1.getchar
是以行为单行存取的。
当用getchar,如果入的第一个字符有效字符(入是文件束符EOFWindows为组Ctrl+Z Unix/Linux为组Ctrl+D),那只有当最后一个入字符为换行符'\n'(也可以是文件束符EOFEOF将在后面讨论) getchar才会停止行,整个程序将会往行。譬如下面程序段: 

while((c = getchar()) != EOF){
    putchar(c);
} 


行程序,入:abc,然后回程序就会去puchar(c),然后abc个地方不要忘了,系统输出的有一个回。然后可以继续输入,再次遇到行符的候,程序又会把那一行的入的字符出在端上。


getchar,肯定很多初学的朋友会getchar不是以字符为单取的?那,既然我入了第一个字符a,肯定while(c = getchar()) != EOF的条件阿,那么应该执putchar(c)出一个字符a。不,我在用getchar候也是一直这么想的,但是程序就偏偏不着样执行,而是必需到一个行符或者文件束符EOF行一次出。

对这问题的一个解是,在大师编C候,当并没有所谓终入的概念,所有的实际上都是按照文件取的,文件中一般都是以行为单位的。因此,只有遇到行符,那程序会认为输束,然后采取行程序的其他部分。同入是按照文件的方式存取的,那束一个文件的入就需用到EOF (Enf Of File). 也就是getchar入退出要用EOF的原因。

2.getchar()
的返回一般情况下是字符,但也可能是负值,即返回EOF

里要强调的一点就是,getchar函数通常返回端所入的字符,些字符系对应ASCII都是非的。因此,很多候,我会写这样的两行代 

char c;
c = getchar(); 


这样就很有可能出现问题。因getchar函数除了返回入的字符外,在遇到Ctrl+D(Linux)即文件束符EOFgetchar ()的返回EOFEOF在函数里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的量是不正确的。了能够让所定量能包含getchar函数返回的所有可能的,正确的定方法如下(K&R C中特提到了问题)

int c;
c = getchar();

二、EOF的两点总结(主要指普通端中的EOF)
1.EOF
文件束符的情况:

EOF
然是文件束符,但并不是在任何情况下Ctrl+D(WindowsCtrl+Z)都能够实现文件束的功能,只有在下列的条件下,才作文件束符。
(1)
遇到getcahr函数,要入第一个字符就直接Ctrl+D,就可以跳出getchar(),行程序的其他部分;
(2)
在前面入的字符为换行符,接着Ctrl+D
(3)
在前面有字符入且不为换行符,要入两次Ctrl+D这时第二次入的Ctrl+D起到文件束符的功能,至于第一次的Ctrl+D的作用将在下面介
情况都可以总结为只有在getchar()提示新的一次,直接Ctrl+D才相当于文件束符。

2.EOF
束符的情况,这时Ctrl+D并不能getchar(),而只能引getchar()提示下一入。

这种情况主要是在getchar()新的一行,当入了若干字符(不能包含行符)之后,直接Ctrl+D,此Ctrl+D并不是文件束符,而只是相当于行符的功能,即束当前的入。以上面的代例,如果时输abc,然后Ctrl+D,程序
abcabc

注意:第一abc入的,然后Ctrl+D,就出第二abc,同停在第二字符的c后面,然后可以行新一次的入。这时如果再次Ctrl+D起到了文件束符的作用,getchar()。
如果abc之后,然后回行符的则终
abc         //
第一行,
abc         //
第二行
               //
第三行

其中第一行为终入,第二行为终出,光停在了第三行,等待新一次的入。
里也可以看出Ctrl+D行符分

© 著作权归作者所有

YHZhu
粉丝 1
博文 12
码字总数 4226
作品 0
大连
私信 提问
getchar()和EOF总结(转载)

大师级经典的著作,要字斟句酌的去读,去理解。以前在看K&R的The C Programming Language(SecondEdition) 第1.5节的字符输入/输出,被getchar()和EOF所迷惑了。可能主要还是由于没有搞清楚g...

长平狐
2013/01/06
53
0
C Primer Plus (第六版) 中文版 随手笔记(七)

版权声明: https://blog.csdn.net/qq_38351824/article/details/80073244 声明:本篇文章只是个人知识盲区、知识弱点、重点部分的归纳总结,望各位大佬不喜勿喷。梳理顺序是按照书籍的实际顺...

sumjess
2018/04/25
0
0
C Primer Plus(5版)第8章习题讲解(二)

小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo或者扫描我的头像,验证时请注明是“知友” 8.10 节复习题如下: putchar(getchar())实现的功能较为简单。getchar从标准输入中读取一...

石家的鱼
2017/07/08
0
0
c语言初学者的问题关于getchar()!=EOF的验证问题

在Windows7的环境下运行GCC编译THE C Programmer Language课本上的示例,出现问题,难以理解。 #include int main() { int c; while((c=getchar())!=EOF) putchar(c); } 上述中的例子运行正常...

gb356
2016/11/23
294
4
getchar()和system(“pause”)让程序暂停的区别以及getchar()获取字符的方式

相信初学者在用vs编辑器时输出窗口总是一闪而过,看都看不到 因为你没有让程序停止的命令; getchar()获取一个字符,让程序停止的语句, 但是呢他并不是在所有时候都起作用; 比如; int ...

triorwy
2017/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据安全管理:RSA算法,签名验签流程详解

本文源码:GitHub·点这里 || GitEE·点这里 一、RSA算法简介 1、加密解密 RSA加密是一种非对称加密,在公开密钥加密和电子商业中RSA被广泛使用。可以在不直接传递密钥的情况下,完成加解密操...

知了一笑
44分钟前
5
0
Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
今天
6
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
7
0
LNMP环境介绍,Mariadb安装,服务管理,mariadb安装3

LNMP环境介绍 Nginx 处理的请求有两种,分为 静态与动态 图片,js,css,视频,音频,flash 等都是静态请求,这些数据都不是保存在数据库里面的 动态请求一般来说,需要的数据是在数据库里面...

doomcat
今天
3
0
前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部