首页 >后端开发 >C++ >为什么在 C 中使用 `cin` 和 `>>` 后 `getline()` 会失败?

为什么在 C 中使用 `cin` 和 `>>` 后 `getline()` 会失败?

DDD
DDD原创
2024-11-12 04:59:02782浏览

Why Does `getline()` Fail After Using `cin` with `>>` C 语言? 
“ />>` 在 C 中?

理解 C 中的 getline()

在 C 中使用 getline() 方法检索用户输入时,记住一个常见问题非常重要:当将 cin 与 >> 一起使用后, getline() 可能无法正确捕获用户输入。

问题:

让我们考虑一下以下代码片段:

string messageVar;
cout << "Type your message: ";
getline(cin, messageVar);

在此代码中,预期 getline() 将读取用户输入并将其存储在 messageVar 中。但是,在某些情况下,getline() 会过早停止,从而使 messageVar 为空。 .

解决方案:

要解决此问题,需要刷新先前 cin >> 操作中在输入缓冲区中留下的换行符。这可以使用 cin.ignore() 来实现:

string messageVar;
cout << "Type your message: ";
cin.ignore();
getline(cin, messageVar);

问题原因:

当使用 >> 时,它会读取输入。直到遇到空白字符(例如空格或换行符)。但是,它将换行符保留在输入缓冲区中,导致 getline() 停止读取,因为它将换行符解释为输入结束。通过使用 cin.ignore(),换行符将从缓冲区中删除,从而使 getline() 能够正常运行。

以上是为什么在 C 中使用 `cin` 和 `>>` 后 `getline()` 会失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

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