首页 >后端开发 >C++ >为什么我的 C `getline()` 函数在使用 `cin` 后挂起?

为什么我的 C `getline()` 函数在使用 `cin` 后挂起?

Barbara Streisand
Barbara Streisand原创
2024-11-09 18:22:02553浏览

Why does my C   `getline()` function hang after using `cin`?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn