如何使用cin>>在它失败或如何退出后再次
while(cin>>some_string>>some_int)
合法地使cin>>可以再次使用吗?
练习是这样的:用名称和年龄填充2个向量(1个字符串和1个int), 通过该行终止输入"不再是",询问程序需要输出相应年龄的名称(或者#34;名称未找到")。我的问题是cin>> :当我进入"没有更多"任何使用cin>>的使用者再次失败。
代码:
{
vector<string>name_s;
vector<int>age_s;
int age = 0,checker=0;
string name;
while( cin>>name>>age) //input of name and age
{
name_s.push_back(name); //filling vectors
age_s.push_back(age);
}
string name_check;
cout<<"\nEnter a name you want to check : ";
cin>>name_check;
for(int i =0;i<name_s.size();++i)
{
if(name==name_s[i])
{
cout<<"\n"<<name_check<<", "<<age_s[i]<<"\n";
++checker;
}
}
if(checker<1)
cout<<"\nName not found.\n";
system("PAUSE");
}
答案 0 :(得分:2)
“按行"no more"
”
Yould可以通过行而不是单词来读取输入:
#include <iostream>
#include <string>
#include <sstream>
...
std::string line;
while (std::getline(std::cin, line) && line != "no more") {
if (line.empty()) ; // TODO: line might be empty
std::istringstream is(line);
std::string name;
int age;
if (is >> name && is >> age) { /* TODO: store new data */ }
}
如果您希望在no more
之后有其他字符时处理这种情况,那么您可以使用line.substr(0,7) != "no more"
,如果您只是想知道no more
是否在行内,不一定在开头,你可以这样做:line.find("no more") != std::string::npos