快捷导航

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

代码如下;```#include 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

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

使用道具 举报

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

使用道具 举报

可能感兴趣的问答

发新帖
TA的信息
  • 会员所属: 注册会员
  • 认证信息: 邮箱认证手机认证
  • 微信访问
  • 手机APP