在C++中使用getline()

MGE*_*MGE 47 c++ string getline

我使用getline方法获取用户输入的消息时遇到问题,我使用的方法如下:

string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);
Run Code Online (Sandbox Code Playgroud)

然而,它并没有停止获得输出值,这有什么问题?

Nat*_*pel 88

如果您正在使用getline()after cin >> something,则需要在两者之间从缓冲区中清除换行符.你可以通过使用来做到这一点cin.ignore().

它会是这样的:

string messageVar;
cout << "Type your message: ";
cin.ignore(); 
getline(cin, messageVar);
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为>>操作符\n在输入缓冲区中留下了换行符.当您执行未格式化的输入时,这可能会成为问题,例如getline(),在找到换行符之前读取输入.发生这种情况,它将立即停止阅读,因为\n在您之前的操作中,它仍然悬挂在那里.


Som*_*ude 6

如果您在输入中只有一个换行符,那就行了

std::cin.ignore();
Run Code Online (Sandbox Code Playgroud)

会很好的.它从输入中读取并丢弃下一个字符.

但是如果输入中还有其他内容,除了换行符(例如,你读了一个单词,但用户输入了两个单词),那么你必须要做

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Run Code Online (Sandbox Code Playgroud)

参见例如ignore功能的参考.

为了更安全,在循环中执行上面的第二个替代,直到gcount返回零.