免费注册 查看新帖 |

Chinaunix

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

新手问一个很傻的,但是书上都没说清楚的问题,关于EOF和\n [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-18 11:58 |只看该作者 |倒序浏览
现在要一个程序记录输入的字符串的行数,也就是\n的个数(newline)。
而输入是否结束,则是用最后那个输入是否是EOF来决定的。

现在问题来了,输入结束我们一般就是一个回车键,但是回车键可能是'\n',也可能是是输入结束EOF吧......如果我写了一个程序,它如何判断我的输入结束了?

K&R的那本书里面写个程序倒是很简单,但是实现起来,似乎不具备可操作性?


  1. #include <stdio.h>
  2. /* count lines in input */
  3. main()
  4. {
  5.     int c, nl;
  6.     nl = 0;
  7.     while ((c = getchar()) != EOF)
  8.         if (c == '\n')
  9.             ++nl;
  10.     printf("%d\n", nl);
  11. }
复制代码


回车就是\n,输入啊,输入,啥时候到EOF啊?...


//我的OS是Ubuntu 6.10,在gnome下面用的模拟终端,程序用cc编译。
//试验发现只有'\n'和CTRL+D一起用时,才具有EOF的作用。
//否则,程序仍将处于等待输入状态。即在输入字母、数字、空格、tab后接CTRL+D不会有任何效果。
//照我看来,这样保证了每一行输入必须以\n结束......
//即使那个'\n'并不是测试者所期望的。(不然初始化那个计数器nl时就要用1而不是0了)
//总结出来的一点感想,如有错误请大家指正哈。

[ 本帖最后由 imonyse 于 2007-4-18 14:26 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-04-18 12:01 |只看该作者
ctrl-D

论坛徽章:
0
3 [报告]
发表于 2007-04-18 12:11 |只看该作者
hehe,我两天前遇见相同的问题.ding二楼.

论坛徽章:
0
4 [报告]
发表于 2007-04-18 12:20 |只看该作者
原帖由 柳五随风 于 2007-4-18 12:01 发表
ctrl-D


呵呵,谢谢哈。我是记得在哪里看到过ctrl+d ctrl+z可以实现的,但是根据我当时的实验,ctrl+d没反应,ctrl+z终止了程序,弄得我当时很郁闷。应该多试试的......

今天又检查了一下,发觉有用......好尴尬啊

论坛徽章:
0
5 [报告]
发表于 2007-04-18 12:26 |只看该作者
ctrl+z好像是把进程挂起吧

论坛徽章:
0
6 [报告]
发表于 2007-04-18 12:27 |只看该作者
具体用 Ctrl-Z、Ctrl-D 或是别的什么,皆由所在操作系统 terminal driver 定义。通常的做法是用 Ctrl-D 来输入文件终止符 ^D,但 MS-DOS 使用 Ctrl-Z,Microsoft Windows 继承了这一做法。

论坛徽章:
0
7 [报告]
发表于 2007-04-18 14:19 |只看该作者
我的OS是Ubuntu 6.10,在gnome下面用的模拟终端,程序用cc编译。

试验发现只有'\n'和CTRL+D一起用时,才具有EOF的作用。否则,程序仍将处于等待输入状态。即在输入字母、数字、空格、tab后接CTRL+D不会有任何效果。
照我看来,这样保证了每一行输入必须以\n结束......即使那个'\n'并不是测试者所期望的。(不然初始化那个计数器nl时就要用1而不是0了)

总结出来的一点感想,如有错误请大家指正哈。

[ 本帖最后由 imonyse 于 2007-4-18 14:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP