解决清空输入缓冲区,函数cin.ignore()的异常问题

本文探讨了VS环境下cin.sync()函数的局限性,如何使用ignore()清理输入缓冲区,以及在清理时遇到的Windows.h头文件冲突。重点介绍了如何利用numeric_limits<streamsize>::max()清除全部用户输入,同时给出了解决冲突的方法。

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

目录

cin.sync()

 numeric_limits::max()

cin.sync()

在数据输入错误的时候,我们需要重新输入数据,首先要清除输入缓冲区里面残留的数据,此时我们可以使用函数cin.sync(),但很不幸的是,这个函数在vs中是无效的(在vc++2010可以),这个函数在vs中无效,我们就使用函数 ignore().

  

ignoer()函数它有俩个参数,示例:第一个参数表示最多清除的字符个数(最多扔掉10个数据),第二个表示直到遇到字符'1',就停止丢弃(不管有没有达到10个字符),字符'1'本身也被丢弃.

 numeric_limits<streamsize>::max()

但这是不现实的,数据是用户输入的,我们哪里知道他输入了多少个数据啊?所以我们要把用户本次输入的数据全部都清掉,就用 numeric_limits<streamsize>::max() 来清理最大的数据个数(即全部),直到遇到回车符'\n'.但是我们会看到这里有一个错误提示,这句涉及到另一个问题了!!!

 在我们使用这个函数的时候,头文件 #include<Windows.h> 会和 numeric_limits<streamsize>::max()发生冲突,这可能是头文件里面的宏定义和这里发生了冲突,如果我们去掉头文件 #include<Windows.h> 那么就不会报错,但这个头文件是要经常用到的,这不可取.

我们可以通过括号"()",来避免编译器报错,也就是改成这样:

 以上!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值