为了账号安全,请及时绑定邮箱和手机立即绑定

关于EOF在循环中运用的问题,谢谢了?

关于EOF在循环中运用的问题,谢谢了?

飞翔的小马哥 2017-07-11 21:38:18
代码如下;``` #include <stdio.h>int main(){ int count = 0; int ch; while ((ch = getchar()) != EOF) count++; printf("All of the characters is %d.\n", count); return 0;}  ```程序目的是计算输入的字符个数,我分别输入了三种情况的数据,得到情况如下:1、什么都不输入直接按【ctrl + D】 (Linux系统) 程序直接退出。2、abc【ctrl + D】【ctrl + D】程序退出。注意:这个时候我需要按两下才能退出。3、abc【回车】这个时候光标移动到了下一行行首,我再按【ctrl + D】程序退出。我很疑惑第二种情况,为什么需要按两次【ctrl + D】呢,小白....先谢谢了
查看完整描述

2 回答

已采纳
?
Camel97

TA贡献49条经验 获得超38个赞

主要有两点,第一个是 io操作存在一个缓冲区的问题,一般终端输入会先被写入缓冲区,当以回车或者EOF结束时getchar才能开始读取。第二个是当EOF作为结尾时,getchar开始读取这一行,但是不会去读最后的EOF字符,这应该是一种特性。但是如果在新的缓冲区直接写入EOF,getchar可以读取到EOF。你的第一个EOF是作为第一个缓冲区的结束不被读取,第二个EOF被读取。

查看完整回答
1 反对 回复 2017-07-12
?
花间独行

TA贡献2条经验 获得超0个赞

【ctrl + D】向下填充,相当于回车

查看完整回答
反对 回复 2017-07-12
  • 2 回答
  • 0 关注
  • 2395 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信