简介
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 << " "; } 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 << " "; } system("pause"); return 0; }
运行结果:
转载自:https://blog.csdn.net/qq_27278957/article/details/89892853
也可参考:https://www.cnblogs.com/tonglingliangyong/p/3908463.html