请教关于EOF的一个问题

七苦炼狱 2016-06-16 11:39:42
#include <stdio.h>

int main(void){
int c;
while((c = getchar()) != EOF);
return 0;
}

我用这段代码测试,输入EOF+回车,程序正常结束
但是我输入‘a’+EOF+回车,程序等待输入?

谁能解释一下?
难道EOF只能单独一行输入?还是别的什么原因啊?
...全文
77 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灸舞 版主 2016-06-16
  • 打赏
  • 举报
回复
cin读入标准输入,直到遇到文件结束符结束符,而在Windows中CTRL+Z相当于文件结束符EOF
windows认为,如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束。
赵4老师 2016-06-16
  • 打赏
  • 举报
回复
<Enter>,<Ctrl+Z>,<Enter>
小灸舞 版主 2016-06-16
  • 打赏
  • 举报
回复
windows认为,如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束。
七苦炼狱 2016-06-16
  • 打赏
  • 举报
回复
引用 4 楼 qq423399099 的回复:
因为它没有读到EOF当然不会跳出循环。 你要输入一行就跳出循环应该写成while((c = getchar()) != '\n') windows下要输入CTRL+Z才相当于结束符EOF
我输入的是'a'+EOF+'\n',为啥没有读到呢?
小灸舞 版主 2016-06-16
  • 打赏
  • 举报
回复
因为它没有读到EOF当然不会跳出循环。
你要输入一行就跳出循环应该写成while((c = getchar()) != '\n')
windows下要输入CTRL+Z才相当于结束符EOF
七苦炼狱 2016-06-16
  • 打赏
  • 举报
回复
引用 2 楼 qq423399099 的回复:
cin读入标准输入,直到遇到文件结束符结束符,而在Windows中CTRL+Z相当于文件结束符EOF windows认为,如果缓冲中还有其它内容,ctrl+z不表示输入结束,仅代表当前行输入结束,只在单独一个ctrl+z的时候才表示输入结束。
那我请问缓冲中还有其他内容时,while((c = getchar()) != EOF)到底为什么变成等待输入的状态? 不该是此时跳出循环么?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧