int n;
std::cin >> n;
std::string s = "";
std::getline(cin, s);
我注意到,如果我使用cin
,我的程序会在下次到达getline(cin, rangeInput)
行时挂起。
由于getline()
正在使用cin
,如果我之前使用过cin
,这是导致程序挂起的原因吗?如果我想在使用cin
之后获得一行,我该怎么办?
答案 0 :(得分:4)
您需要清除输入流 - 尝试在cin之后添加以下内容:
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
this问题的已接受答案可以很好地解释为什么/何时需要这样做。
答案 1 :(得分:0)
std::cin
在输入流中留下无关的\n
。当您使用std::getline()
时,您正在检索\n
。
虽然如果真的需要std::cin
,@ WilliamLannen的回答是有效的,那么最好使用这种方法:
int n;
std::string sn;
std::stringstream ssn;
std::getline(std::cin, sn);
ssn << sn;
ssn >> n;
参考
http://www.daniweb.com/software-development/cpp/tutorials/71858
答案 2 :(得分:0)
int n;
std::cin >> n;
std::cin.get() //<--- use cin.get() here ...
std::string s = "";
std::getline(cin, s);