cin.getline () пропускает ввод в C ++
Если я использую следующий код, getline не берет последний ввод (для последней итерации цикла «для» он просто пропускает его) -
<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>
Чтобы избавиться от этого, я поставил cin.ignore () после getline. Теперь он принимает все входные данные, но я столкнулся с новой проблемой -
<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>
Новая проблема заключается в том, что при получении c2 первый символ строки удаляется. Например, если я дам «Англия Джейн Доу» в качестве входных данных для getline, в c2 я получу "ngland".
Как избавиться от этой проблемы сейчас?