免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 11186 | 回复: 20
打印 上一主题 下一主题

关于EOF的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-30 14:57 |只看该作者 |倒序浏览
int c;
while ( (c = getchar())!= EOF)
    putchar(c);

我用gcc编译了该代码(cygwin), 运行,有个疑问
当输入 123 CTRL+D 并按回车 之后, 我认为结果应是123并马上退出循环,
但实际并未退出,若单独输入ctrl+d则马上退出,请教是为什么

论坛徽章:
0
2 [报告]
发表于 2005-12-30 16:00 |只看该作者
你怎么输入EOF?

论坛徽章:
0
3 [报告]
发表于 2005-12-30 16:39 |只看该作者
ctrl+d, 是在cygwin下运行,可以理解为我是在shell中运行它

[ 本帖最后由 tianjiao08 于 2005-12-30 16:42 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2005-12-30 17:10 |只看该作者
linux下,ctrl + D 是 输入 EOF 的意思。
输入 123 然后 ctrl +D 是表示 结束 123 的输入,此时 EOF 是对 “123”这个输入而言;
如果单独输入 ctrl + D 则 EOF 是对 程序而言,所以退出。
若是 123  ctrl + D ,然后在一次 ctrl + D,同样会退出程序。
以上理解如有不对之处,请指教。

论坛徽章:
0
5 [报告]
发表于 2005-12-31 00:31 |只看该作者
原帖由 hackobe 于 2005-12-30 17:10 发表
linux下,ctrl + D 是 输入 EOF 的意思。
输入 123 然后 ctrl +D 是表示 结束 123 的输入,此时 EOF 是对 “123”这个输入而言;
如果单独输入 ctrl + D 则 EOF 是对 程序而言,所以退出。
若是 123  ctrl + D ...


谢谢,我不明白的是,ctrl+d 代表EOF,则系统读入后,它应该跳出循环,而实际并没有跳出循环, 因此,系统并未将这个ctrl+d当成EOF,而在单独输入是,确实是当成了EOF而跳出了循环,我想知道为什么前一种未退出循环

论坛徽章:
0
6 [报告]
发表于 2005-12-31 08:40 |只看该作者
帮顶

[ 本帖最后由 bandw 于 2005-12-31 08:42 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2005-12-31 10:28 |只看该作者
有输入的时候 EOF 退出当前的输入,
无输入的时候 EOF 退出当前的程序。
退出也是按层次退的。

论坛徽章:
0
8 [报告]
发表于 2005-12-31 10:55 |只看该作者
原帖由 tianjiao08 于 2005-12-30 14:57 发表
int c;
while ( (c = getchar())!= EOF)
    putchar(c);

我用gcc编译了该代码(cygwin), 运行,有个疑问
当输入 123 CTRL+D 并按回车 之后, 我认为结果应是123并马上退出循环,
但实际并未退出,若单独 ...

当输入 123 CTRL+D 并按回车 之后,OS会认为你输入的是123 CTRL+D,即(c='123 CTRL+D')!=EOF,不会推出循环。
如果你单独输入CTRL+D,(c='CTRL+D')==EOF当然就要退出

论坛徽章:
0
9 [报告]
发表于 2005-12-31 18:24 |只看该作者
原帖由 rainballdh 于 2005-12-31 10:55 发表

当输入 123 CTRL+D 并按回车 之后,OS会认为你输入的是123 CTRL+D,即(c='123 CTRL+D')!=EOF,不会推出循环。
如果你单独输入CTRL+D,(c='CTRL+D')==EOF当然就要退出


我觉得不是,getchar()返回的是第一个输入自符,他首先读入 1 ,输出,当缓冲非空时,继续读入,直到缓冲为空,因此,应该是他读到 ctrl+d 时并未把它当成eof,但为什么这样我就不清楚了,还请高人指教

论坛徽章:
0
10 [报告]
发表于 2005-12-31 22:08 |只看该作者
原帖由 tianjiao08 于 2005-12-31 18:24 发表


我觉得不是,getchar()返回的是第一个输入自符,他首先读入 1 ,输出,当缓冲非空时,继续读入,直到缓冲为空,因此,应该是他读到 ctrl+d 时并未把它当成eof,但为什么这样我就不清楚了,还请高人指教

你说的对,我理解错误了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP