搜索
楼主: 981013
打印 上一主题 下一主题

怎么清除EOF?

[复制链接]
16#
发表于 2014-3-23 15:52:33 | 只看该作者
981013 发表于 2014-3-23 15:20
是bash
不过一般用的是xCode的虚拟终端

确实是个问题,让我研究研究看看
17#
发表于 2014-3-23 16:02:03 | 只看该作者
简单的对应方法
  1. #include <stdio.h>

  2. int main()
  3. {
  4.   while(1){
  5.     int ch;
  6.     ch = getchar();
  7.     if(ch != EOF)
  8.       printf(" %d\n", ch);
  9.     else
  10.       clearerr(stdin);
  11.   }
  12.   return 0;
  13. }
复制代码


可能在libc或者系统接口上OS X和Linux的实现有点不同
18#
发表于 2014-9-7 21:58:50 | 只看该作者
当时的回复有个地方不怎么确定,这个问题其实可以比照一下OSX和Linux的man page

OSX getchar (3)
The end-of-file condition is remembered, even on a terminal, and all subsequent attempts to
     read will return EOF until the condition is cleared with clearerr(3).

https://developer.apple.com/libr ... man3/getchar.3.html

linux getchar (3)
http://man7.org/linux/man-pages/man3/getchar.3.html

没有强调terminal会记住EOF的状态
19#
 楼主| 发表于 2014-9-8 11:30:30 | 只看该作者
rosynirvana 发表于 2014-9-7 21:58
当时的回复有个地方不怎么确定,这个问题其实可以比照一下OSX和Linux的man page

OSX getchar (3)

也就是说在Mac OS上终端记住了EOF,然后在clearerr之前都不能正常读取?
20#
 楼主| 发表于 2014-9-8 11:30:36 | 只看该作者
rosynirvana 发表于 2014-9-7 21:58
当时的回复有个地方不怎么确定,这个问题其实可以比照一下OSX和Linux的man page

OSX getchar (3)

也就是说在Mac OS上终端记住了EOF,然后在clearerr之前都不能正常读取?
21#
 楼主| 发表于 2014-9-8 11:30:46 | 只看该作者
rosynirvana 发表于 2014-9-7 21:58
当时的回复有个地方不怎么确定,这个问题其实可以比照一下OSX和Linux的man page

OSX getchar (3)

也就是说在Mac OS上终端记住了EOF,然后在clearerr之前都不能正常读取?
22#
 楼主| 发表于 2014-9-8 11:32:50 | 只看该作者
论坛出毛病了,发的时候说内部错误,结果发了三遍
23#
发表于 2014-9-8 11:33:07 | 只看该作者
981013 发表于 2014-9-8 11:30
也就是说在Mac OS上终端记住了EOF,然后在clearerr之前都不能正常读取?

是的
另外文档下面标着BSD,说明在BSD系统中应该都是这样

另,现在没有Mac OS,只有OS X
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表