c++输入缓存区彻底清空

一开始遇到的问题大概是

while循环中判断的变量如果输入非数字时会导致死循环

在其他文章中看到其他清空输入缓存区的方法,但是使用后仍有一些问题,比如

cin.clear();与cin.ignore();一起使用时

即为在while循环中的末尾添加两行语句
比如

while(x)
{
...
...
...
	cin.clear();
	cin.ignore();
}

虽然确实解决了死循环的问题,但是里面如果有if语句的话,本次所有的if语句都会真,继续执行

while ((a = getchar()) != ‘\n’);使用时

即在输入数据后使用gatchar把被读取的数据,后面剩下的数据依次读取出来
以下是我使用的场景,或许是我使用有问题,还请指出

while(x)
{
cin >> x;
char a;
while ((a = getchar()) != '\n');
......
......
}

问题确实解决了,但是后面再继续输入时,cin直接跳过去了

while(x)
{
cin >> x;
char a;
while ((a = getchar()) != '\n');
cin >> x;
......
......
}

也就是说缓冲区仍有内容?

以上这种问题,以我目前的水平,能想到的解决方案只有

getchar与clear一起用,即在获取输入后使用getchar,然后使用cin.clear();复位位置标志
(目前仍有一个问题,这样使用时,如果输入(数字+非数字)时,会正确读取非数字前的数字)
以本人目前水平暂时无法解决

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值