前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【答疑解惑】getchar()与EOF

【答疑解惑】getchar()与EOF

作者头像
程序员互动联盟
发布2018-03-14 11:37:22
1.2K0
发布2018-03-14 11:37:22
举报

先看下面的代码:

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

这一段代码是The C Programming Language(Second Edition)中一个经典的代码,很多初学者在看到这段代码时会有不少疑问,这里做一个简单的总结。

一、getchar的两点总结

getchar是以行为单位来读取的。

当调用getchar函数读取输入时,只有当输入字符为换行符'/n'或文件结束符EOF时,getchar才会停止执行。这句话的意思比如我们运行上面那段代码时,我们输入的是回车键或者EOF(linux下是按下Ctrl+D,windows下是按下Ctrl+Z)是,getchar才结束,而不是像它的名字一样,输入一个字符getchar就返回了。所以输入abc回车,putchar(c)会输出abc和一个回车。这是一个初学者经常会迷惑的点。

getchar的返回值

getchar()的返回值一般情况下是非负 值,但也可能是负值,即返回EOF。这个EOF在函数库里一般定义为-1。正确的定义方法如下(K&R C中特别提到了这个问题):

int c; c = getchar();

二、EOF总结

在这个实例中,EOF并不是在任何情况下都作为文件结束符的。也就是说按下Ctrl+Z或者Ctrl+D不是任何时候都会结束这个循环的。只有在getchar等待全新的输入时直接按下Ctrl+Z或者Ctrl+D才是文件结束,这个时候才会结束循环。

例如在输入abc后按下Ctrl+Z或者Ctrl+D,会是下面的打印:

abcabc

第一组abc是你从终端输入的,然后输入Ctrl+D,getchar逐个字符读取并逐个输出打印出第二组abc,同时光标停在第二组字符的c后面,然后可以进行新一次的输入。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员互动联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档