有关cin.sync的用法及解释和如何清除缓冲区

VC和VS

我们应该都知道在cin.sync的作用为清除缓冲区的错误标志,但是在VC中(2010…等版本)这个函数需求可以实现,但再VS(2019,2020…等版本)中,这个需求却无法被实现,而且程序也不会报错,这就是编译器本身的问题了。
实质上来说cin.sync本质上不是清除缓冲区的意思
sync:Synchronizes the input buffer with the associated data source(与缓冲区关联的输入同步).



与readsome()一样,此函数是否对库提供的流执行任何操作都是由实现定义的。其目的通常是让下一个读取操作获取流缓冲区最后一次填充其get区域之后对相关输入序列所做的任何更改。为了达到这个目的,sync()可以清空get区域,或者重新填充它,或者什么都不做。一个值得注意的例外是visualstudio,当使用标准输入流调用时,此操作将丢弃未处理的输入




精准意义上而言,cin.ignore才是清除缓冲区的错误数据,无论在VC和VS中都可以使用
cin.ignore函数 原型:istream &ignore( streamsize num=1, int delim=EOF );
函数作用是跳过输入流中n个字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。

比如cin.ignore(4096,'\n')
这里的4096,就是代表跳过了4096个字节(其实像什么1024个字节也可以,因为输入缓冲区大小是有限度的,当然有宏,也可以找到宏去限制大小,可惜我没找到
这里的‘\n’,就是代表到换行结束。




清除缓冲区的方法

我们前面所说的运用函数cin.ignore去清除是一种办法,当然,你也可以不用这个函数,也可以实现相同的目的
如图所示在这里插入图片描述
相当于把垃圾放进了垃圾桶里

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值