最近在看一段程序的时候看见用完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;
}
这下再运行的话就是对的了,会输入你想统计的数字。看似很小的问题,但是如果不注意的话也会造成程序的错误,我从这个小问题中学习来很多,知识的积累可能就是一步一个脚印吧!