搜索
查看: 2950|回复: 22
打印 上一主题 下一主题

怎么清除EOF?

[复制链接]
跳转到指定楼层
楼主
发表于 2014-3-16 16:47:59 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
如题,请给出C和C++两种方案
(C++):cin.clear()还不够,cin的错误标志被清除了,但仍不能接受输入。

沙发
 楼主| 发表于 2014-3-16 16:52:58 | 显示全部楼层
本帖最后由 981013 于 2014-3-16 16:58 编辑

例如:
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int main(int argc, const char * argv[])
  5. {
  6.     vector<int> vec;
  7.     while (cin)
  8.     {
  9.         int ls;
  10.         cin>>ls;
  11.         vec.push_back(ls);
  12.     }
  13.     cin.clear();
  14.     if (cin)
  15.     {
  16.         cout<<"Good cin!"<<endl;
  17.     }
  18.     int a;
  19.     cin>>a;
  20.     cout<<a<<endl;
  21.     cout << "Hello, World!\n";
  22.     return 0;
  23. }
复制代码
输出:
输入流中的EOF应该已经在cin>>ls;时被读取了啊?!

未命名.jpg (44.08 KB, 下载次数: 22)

输出

输出
板凳
 楼主| 发表于 2014-3-21 20:31:01 | 显示全部楼层
rosynirvana 发表于 2014-3-16 22:46
原因是cin的flag被清掉了,但是流里面还有EOF这个字符既然知道是残留字符,那就一般的清理残留字符的手段就 ...

试了一下,好像和平台有关,linux下没有问题,Windows下要求在cin.get时再按一个回车,Mac OS则根本没用
是否跟回车处理有关?(\r\n之类)
地板
 楼主| 发表于 2014-3-23 14:48:31 | 显示全部楼层
rosynirvana 发表于 2014-3-21 21:28
首先,和系统处理回车的方式无关
测试代码

Mac OS (UNIX)下这段代码就死循环了其他系统下都没问题
5#
 楼主| 发表于 2014-3-23 15:07:05 | 显示全部楼层
rosynirvana 发表于 2014-3-23 14:54
没明白,那段本来就是死循环啊?

就是不停输出-1
6#
 楼主| 发表于 2014-3-23 15:20:09 | 显示全部楼层
rosynirvana 发表于 2014-3-23 15:08
你在OS X下面用的是哪个shell? bash还是其他的? 我去试试看

是bash
不过一般用的是xCode的虚拟终端
7#
 楼主| 发表于 2014-9-8 11:30:30 | 显示全部楼层
rosynirvana 发表于 2014-9-7 21:58
当时的回复有个地方不怎么确定,这个问题其实可以比照一下OSX和Linux的man page

OSX getchar (3)

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

OSX getchar (3)

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

OSX getchar (3)

也就是说在Mac OS上终端记住了EOF,然后在clearerr之前都不能正常读取?
10#
 楼主| 发表于 2014-9-8 11:32:50 | 显示全部楼层
论坛出毛病了,发的时候说内部错误,结果发了三遍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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