1

失敗した後にcin>>を再度使用する方法、またはcin>> を再度while(cin>>some_string>>some_int)使用できるように合法的に終了する方法は?

演習は次のようになります: 2 つのベクトル (文字列 1 つと整数 1 つ) に名前と年齢を入力し、「no more」という行で入力を終了し、プログラムが対応する年齢を出力する必要がある名前を尋ねます (または「名前が見つかりません」 」)。私の問題は 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");

}

4

1 に答える 1

2

"行で入力を終了"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 moreline.find("no more") != std::string::npos

于 2014-04-10T10:54:05.903 に答える