cin.getline () überspringt eine Eingabe in C ++

Wenn ich den folgenden Code verwende, nimmt getline nicht die letzte Eingabe (für die letzte Iteration der "for" -Schleife wird sie einfach übersprungen) -

<code>int main()
{
    int n;
    map<string, set<string> > lst;
    string c,s,c2;

    cin>>n;

    for(int i=0;i<n;i++)
    {
            getline(cin,c); // here it skips the input for last iteration
            stringstream ss;
            ss<<c;

            bool f=1;
            while(ss>>s)
            {
                        if(f)
                        {
                             c2=s;
                             f=0;
                        }
                        else
                             lst[c2].insert(s);           
            }
    }

    for (map<string, set<string> >::const_iterator ci = lst.begin(); ci != lst.end(); ++ci)
    {
                cout<< (*ci).first <<" "<< (*ci).second.size() <<endl;
    }
}
</code>

Um es loszuwerden, setze ich cin.ignore () nach getline. Jetzt nimmt es alle Eingaben, aber ich stehe vor einem neuen Problem -

<code>#include<iostream>
#include<string>
#include<map>
#include<set>
#include<sstream>
#include<algorithm>

using namespace std;

int main()
{
    int n;
    map<string, set<string> > lst;
    string c,s,c2;

    cin>>n;

    for(int i=0;i<n;i++)
    {
            getline(cin,c);
            cin.ignore();
            stringstream ss;
            ss<<c;

            bool f=1;
            while(ss>>s)
            {
                        if(f)
                        {
                             c2=s;
                             f=0;
                        }
                        else
                             lst[c2].insert(s);           
            }
    }

    for (map<string, set<string> >::const_iterator ci = lst.begin(); ci != lst.end(); ++ci)
    {
                cout<< (*ci).first <<" "<< (*ci).second.size() <<endl;
    }
}
</code>

Das neue Problem ist, dass beim Aufnehmen von c2 das erste Zeichen der Zeichenfolge entfernt wird. Wenn ich zum Beispiel "England Jane Doe" als Eingabe für getline gebe, bekomme ich in c2 "ngland".

Wie kann dieses Problem jetzt behoben werden?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage