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

代码如下;



```

 #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系统) 程序直接退出。

http://img.mukewang.com/5964d4a50001221204170043.jpg

2、abc【ctrl + D】【ctrl + D】程序退出。注意:这个时候我需要按两下才能退出。

3、abc【回车】这个时候光标移动到了下一行行首,我再按【ctrl + D】程序退出。

http://img.mukewang.com/5964d4b0000112d404070051.jpg


我很疑惑第二种情况,为什么需要按两次【ctrl + D】呢,小白....先谢谢了

飞翔的小马哥
浏览 2396回答 2
2回答

Camel97

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

花间独行

【ctrl + D】向下填充,相当于回车
打开App,查看更多内容
随时随地看视频慕课网APP