在使用`cin>>后使用`getline(cin,s);` N;`

时间:2009-07-26 07:27:47

标签: c++ stream

int n;
std::cin >> n;

std::string s = "";
std::getline(cin, s);

我注意到,如果我使用cin,我的程序会在下次到达getline(cin, rangeInput)行时挂起。

由于getline()正在使用cin,如果我之前使用过cin,这是导致程序挂起的原因吗?如果我想在使用cin之后获得一行,我该怎么办?

3 个答案:

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