c++ cin.clear()

简介
cin.clear() 表示使流重新处于有效状态,一般情况它与 cin.sync() 配合使用,使用顺序如下:

cin.clear(); //使流重新处于有效状态
cin.sync(); //清除缓存区的数据流
cin.sync() 表示清除缓存区的数据流。必须 cin.clear() 在前,cin.sync() 在后。因为在流中 fail() 状态值无效的情况下,执行cin.sync() 清空流是无效的,输入流中的数据依旧在(从错误开始那个,包括错误那个字符仍然在流中)。

实例

#include <iostream>
#include <string>
#include <deque>
using namespace std;

int main() {
deque<string> lists;
string str;

cout << "输入list数据(Ctrl + Z 结束):" << endl;
while (cin >> str)
{
lists.push_back(str);
}

cin.clear();    //使流重新处于有效状态
cin.sync();    //清空数据(只使用 cin.clear() 也可达到效果)

cout << "读入要寻找的值:" << endl;
cin >> str;

for (deque<string>::iterator iter = lists.begin();
iter != lists.end(); ++iter)
{
if (*iter == str)
{
//删除此值
iter = lists.erase(iter);
--iter;
}
}

cout << "输出处理后的数据:" << endl;
for (deque<string>::iterator iter = lists.begin();
iter != lists.end(); ++iter)
{
cout << *iter << "\t";
}


system("pause");
return 0;
}


输入输出结果如下:

 

 

 

此为正常运行结果。

如果不使用 cin.clear() ,则会在“读入要寻找的值”时,直接跳过,默认读入的 str 为上面最后一次读入的数据,即数值5。这是错误的方式。

#include <iostream>
#include <string>
#include <deque>
using namespace std;

int main() {
deque<string> lists;
string str;

cout << "输入list数据(Ctrl + Z 结束):" << endl;
while (cin >> str)
{
lists.push_back(str);
}

//    cin.clear();    //使流重新处于有效状态
//    cin.sync();    //清空数据(只使用 cin.clear() 也可达到效果)

cout << "读入要寻找的值:" << endl;
cin >> str;

for (deque<string>::iterator iter = lists.begin();
iter != lists.end(); ++iter)
{
if (*iter == str)
{
//删除此值
iter = lists.erase(iter);
--iter;
}
}

cout << "输出处理后的数据:" << endl;
for (deque<string>::iterator iter = lists.begin();
iter != lists.end(); ++iter)
{
cout << *iter << "\t";
}


system("pause");
return 0;
}

 


运行结果:

 

 

 

转载自:https://blog.csdn.net/qq_27278957/article/details/89892853

也可参考:https://www.cnblogs.com/tonglingliangyong/p/3908463.html



posted @ 2020-02-20 11:38  lilouv  阅读(1139)  评论(0编辑  收藏  举报