免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
发表于 2005-12-30 14:57 |显示全部楼层
int c;
while ( (c = getchar())!= EOF)
    putchar(c);

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

论坛徽章:
0
发表于 2005-12-30 16:00 |显示全部楼层
你怎么输入EOF?

论坛徽章:
0
发表于 2005-12-30 16:39 |显示全部楼层
ctrl+d, 是在cygwin下运行,可以理解为我是在shell中运行它

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

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

论坛徽章:
0
发表于 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
发表于 2005-12-31 08:40 |显示全部楼层
帮顶

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

论坛徽章:
0
发表于 2005-12-31 10:28 |显示全部楼层
有输入的时候 EOF 退出当前的输入,
无输入的时候 EOF 退出当前的程序。
退出也是按层次退的。

论坛徽章:
0
发表于 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
发表于 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
发表于 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