在 C 中使用 getline()

新手上路,请多包涵

我在使用 getline 方法获取用户键入的消息时遇到问题,我正在使用类似的东西:

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

但是,它并没有停止获取输出值,这有什么问题?

原文由 MGE 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 691
2 个回答

如果您在 getline() cin >> something ,则需要将换行符从缓冲区中刷新。您可以使用 cin.ignore() 来做到这一点。

它会是这样的:

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

发生这种情况是因为 >> 运算符在输入缓冲区中留下了换行符 \n 字符。当您进行无格式输入时,这可能会成为一个问题,例如 getline() ,它会读取输入直到找到换行符。发生这种情况时,它将立即停止读取,因为在您之前的操作中挂在那里的 \n

原文由 Natan Streppel 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有类似的问题。一个缺点是使用 cin.ignore() ,您必须再按回车键 1 次,这会使程序混乱。

原文由 logankilpatrick 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题