Как прекратить cin & gt; & gt; ввод с определенным словом / буквой / числом / и т. д.

Как использовать cin >> снова после сбоя или как выйти
while(cin>>some_string>>some_int) законно, чтобы cin >> можно было снова использовать?

Упражнение идет примерно так: заполните 2 вектора (1 строка и 1 int) именем и возрастом,
завершить ввод строкой «не более», запросить имя, для которого программе необходимо вывести соответствующий возраст (или «имя не найдено»). Моя проблема с cin >>: когда я ввожу «no more», любая попытка использования 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");

}

1

Решение

«завершить ввод строкой "no more"«

Вы можете прочитать ввод по строкам, а не по словам:

#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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]