在 C 中使用 getline() :排除用户输入故障
当使用 getline() 方法检索用户输入时,至关重要的是意识到潜在的陷阱。考虑以下代码:
string messageVar; cout << "Type your message: "; getline(cin, messageVar);
尽管尝试获取用户输入,但此代码会无限期挂起,永远不会捕获所需的消息。
问题原因:
问题源于 cin >>运算符在输入缓冲区中留下换行符 n。这对于 getline() 来说是有问题的,它读取输入直到遇到换行符。结果,getline() 在没有提供任何输入的情况下提前终止。
解决方案:
要解决此问题,您必须从输入缓冲区中刷新换行符在调用 getline() 之前。这可以使用 cin.ignore() 来实现:
string messageVar; cout << "Type your message: "; cin.ignore(); getline(cin, messageVar);
通过添加 cin.ignore(),缓冲区中留下的换行符将被丢弃,从而允许 getline() 按预期运行。它将等待用户输入并在按下 Enter 键时捕获输入的消息。
以上是为什么我的 C `getline()` 函数在使用 `cin` 后挂起?的详细内容。更多信息请关注PHP中文网其他相关文章!