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);