0

可能重复:
在 getline() 方面需要帮助

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

在此处输入图像描述

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;

我很感激解释为什么会发生这种情况以及将来如何避免它

4

2 回答 2

3

cin >> something将尾随换行符留在缓冲区中,这将被下一个忽略cin >> something_else(大概这是您阅读菜单选项的方式)。但是,getline获取缓冲区中的所有内容并包括下一个换行符,而不是忽略空格。即在这种情况下它什么也得不到(嗯,只是换行符)。

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

编辑:为了澄清,getline将从缓冲区中删除最后一个换行符,但不会将其存储在您的string.

于 2012-09-27T13:33:42.717 回答
1

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

于 2012-09-27T13:40:40.300 回答