c++中cin.clear()、cin.sync()的用法

最近在看一段程序的时候看见用完cin之后有的时候需要用到cin.clear(); cin.sync();
首先需要加#include,然后在学习这个用法时,让我对cin有了新的认识,例如我们读取一系列整型数据,将其存入vector对象中,然后使用count()统计某个指定值出现的次数,下面是我开始的程序:

#include<iostream>
#include"algorithm"
#include<vector>

using namespace std;

int main()
{
    int num;
    vector<int> ivec;
    while(cin>>num)
    {
        ivec.push_back(num);
    }
    cout<<"please input the number you want to count"<<endl;
    cin>>num;
    cout<<num<<" appears "<<count(ivec.begin(), ivec.end(), num)<<" times"<<endl;
    return 0;
}

我输入三个数字分别为 1 2 3 2 想统计2出现的次数,最终输出的结果如下:

1 2 3 2
^Z
please input the number you want to count
2 appears 2 times
	自己实现的话会发现当输入完1 2 3 2 之后按下Ctrl+Z之后please input the number you want to count会直接出来然后出现2统计的次数 ,根本没有机会输入你想统计的数字2。
	这说明系统的输入流以及有数据存在了,程序将输入数据的最后一个数据作为你想统计的数字。因此我们可以把输入流clear掉,因此可以输入cin.clear(); cin.sync()。cin.clear()是用来更改cin的状态标示符的,  cin.sync()是用来清除缓存区的数据流的。如果标示符没有改变那么即使清除了数据流也无法输入。所以两个要联合起来使用。
	更改完之后的代码如下:
#include<iostream>
#include"algorithm"
#include<vector>

using namespace std;

int main()
{
    int num;
    vector<int> ivec;
    while(cin>>num)
    {
        ivec.push_back(num);
    }
    cin.clear();
    cin.sync();
    cout<<"please input the number you want to count"<<endl;
    cin>>num;
    cout<<num<<" appears "<<count(ivec.begin(), ivec.end(), num)<<" times"<<endl;
    return 0;
}

这下再运行的话就是对的了,会输入你想统计的数字。看似很小的问题,但是如果不注意的话也会造成程序的错误,我从这个小问题中学习来很多,知识的积累可能就是一步一个脚印吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值