getline函数不能使用多个字符串输入

时间:2012-09-27 13:28:49

标签: c++ visual-studio-2010 visual-c++

  

可能重复:
  Need help with getline()

我尝试将getline函数与cin结合使用以从键盘获取输入,但我的代码跳过了getline语句,而是转到下面的cin函数。这是我的代码和正在发生的事情的截图。

enter image description here

void addmovie(ofstream& MovieContentsFile) {

string movieTitle;
int movieQuantity;

cout << " \n Add Movie Selected \n " << endl;

cout << "Please type in the movie title and press enter \n" << endl;

getline(cin,movieTitle, '\n');

cout << "Movie: " << movieTitle << "Please type in the amount of copies we have of this movie \n " << endl;

cin >> movieQuantity;

我很感激解释为什么会这样,以及我将来如何避免它

2 个答案:

答案 0 :(得分:3)

cin >> something在缓冲区中留下尾随换行符,下一个cin >> something_else将忽略该换行符(可能这是您阅读菜单选项的方式)。但是,getline获取所有直到并包括缓冲区中的下一个换行符,而不是忽略空格。即在这种情况下它没有任何结果(好吧,只是换行符)。

一般来说,最好不要混合使用两者,它可能会变得有点混乱。

修改:要澄清一下,getline会从缓冲区中删除最后一个换行符,但不会将其存储在string中。

答案 1 :(得分:0)

这是因为换行符仍然在缓冲区中,所以当它到达getline时它会看到它并跳过它。为避免这种情况,您可以在此之前放置cin.ignore(25, "\n")之类的内容。这将忽略25个字符,直到它到达换行符然后它也需要它。