while(cin)?
#include<iostream> #include<utility> using namespace std; int main() { int i; do { cout<<i<<endl; }while(cin>>i); }
首先输出个0.之后输入X,输出X;当输入ctrl+d时,没有输出,结束。
#include<iostream> #include<utility> using namespace std; int main() { int i; do{ cin>>i; cout<<i<<endl; }while(cin); }
输入x,输出x;当输入ctrl+d时,再输出个上一次的输入量,结束。
ctrl+d表示表示输入错误。
cin.clear()可以重新将cin置为有效。
导致循环终止的原因是流对象cin进入错误状态:系统输入级故障;读入了无效数据;遇到文件结束符。
下面是一个用到cin判断作为循环条件的程序:
#include<iostream> #include<utility> #include<vector> #include<map> using namespace std; int main() { map<string,vector< pair<string,string> > > family; pair<string,string> pa; string surName,childName,birthDate; do{ cout<<"enter surname"<<endl; cin>>surName; if(!cin) break; //如果cin无效,跳出循环 vector< pair<string,string> > child; pair<map<string,vector<pair<string,string> > >::iterator,bool> ret = family.insert(make_pair(surName,child)); cout<<"input name and age"<<endl; while(cin>>surName>>birthDate) { pair<string,string> pa; pa = make_pair(surName,birthDate); ret.first->second.push_back(pa); //ctrl+d跳出循环,此时cin无效 } cin.clear(); //使cin重新有效,以达到下面while循环条件。 }while(cin); cout<<"enter search"<<endl; cin.clear(); cin>>surName; map<string,vector< pair<string,string> > >::iterator it = family.find(surName); if(it==family.end()) cout<<"no this surname"<<endl; else { vector< pair<string,string> >::iterator itt = it->second.begin(); while(itt!=it->second.end()) { cout<<(*itt).first<<"\t\t"<<(*itt).second<<endl; itt++; } } return 0; }