cin的错误标记和缓冲区清空

本文探讨了在C++中使用cin输入时遇到的错误标记问题以及如何清空输入缓冲区。当遇到非数字字符时,istream_iterator会设置end-of-stream标志,导致后续输入无法进行。解决方案是通过cin.clear()清除错误标记,然后使用cin.sync()清空缓冲区,确保正常输入。同时,文章提到了cin.ignore()作为清空缓冲区的替代方法,但未深入研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看下面的代码:

vector<int> intVtr;
intVtr.insert(intVtr.end(), istream_iterator<int>(cin), istream_iterator<int>());

上面的代码就是从标准输入中得到int型数字,并把值插入到intVtr中。当遇到非数字字符时,输入结束。

问题是,现在我要继续从标准输入读进int数字并插入intVtr结尾(也可以在其他位置,本文假定在结尾),那么该怎么写代码?开始的时候我习惯性的继续写:

//使用过intVtr之后
copy(istream_iterator<int>(cin), istream_iterator<int>(), inserter(intVtr, intVtr.end()));

编译运行时发现,这个copy根本不起作用,没有机会在标准输入中输入数字,这是为什么?搜索一下istream_iterator吧:在www.cplusplus.com里发现这么句话:

A special value for this iterator exists: the end-of-stream; When an iterator is set to this value has either reached the end of the stream (operator void*

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值