Utiliser `getline (cin, s);` après avoir utilisé `cin >> n;`

int n; std::cin >> n; std::ssortingng s = ""; std::getline(cin, s); 

J’ai remarqué que si j’utilisais cin , mon programme se bloquerait la prochaine fois que j’atteindrais la ligne getline(cin, rangeInput) .

Puisque getline() utilise cin , est-ce la raison pour laquelle le programme est suspendu si j’ai déjà utilisé cin ? Que dois-je faire si je veux obtenir une ligne après avoir utilisé cin ?

Vous devez effacer le stream d’entrée – essayez d’append ce qui suit après votre cin:

 cin.clear(); cin.ignore(std::numeric_limits::max(), '\n'); 

La réponse acceptée à cette question explique bien pourquoi et quand cela est nécessaire.

std::cin laisse un \n superficiel dans le stream d’entrée. Lorsque vous utilisez std::getline() , vous récupérez ce std::getline() \n .

Bien que la réponse de @ WilliamLannen fonctionne si vous avez vraiment besoin de std::cin , il vaut mieux utiliser cette méthode:

 int n; std::ssortingng sn; std::ssortingngstream ssn; std::getline(std::cin, sn); ssn << sn; ssn >> n; 

Références

http://www.daniweb.com/software-development/cpp/tutorials/71858

 int n; std::cin >> n; std::cin.get() //<--- use cin.get() here ... std::string s = ""; std::getline(cin, s);