c++ - C++:如何清除缓冲区
问题描述
我有下一个代码:
char shapetype;
std::cout << "which shape would you like to work with?" << std::endl;
std::cin >> shapetype;
switch (shapetype) {
case 'c':
std::cout << "enter color, name, rad for circle" << std::endl;
std::cin >> col >> nam >> rad;
如果我在第 2 行编写示例“cemfkem”,在 shapetype 中,我有 c,而字符串的另一部分留在缓冲区中,所以当我进入 col、nam 和 rad 时,缓冲区进入 col 的另一部分字符串。我怎样才能清理缓冲区?
解决方案
因此,您正在使用cin
获取单个字符并且缓冲区中仍然有垃圾,因为您的用户输入了废话。
摆脱这种情况的方法是使用cin.ignore()
. cin.ignore()
接受 2 个参数,一个整数表示要忽略的字符数,以及一个分隔符,如果到达该字符,它将基本上清除缓冲区。
您可能希望cin.ignore(<A REALLY BIG NUMBER>, '\n');
缓冲区会清除很长一段时间,或者直到它到达返回字符,以先发生者为准。
您可以像这样获取缓冲区的最大大小,而不是使用硬编码的大数字:
//include this with your other #includes
#include <limits>
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
推荐阅读
- text - 如何编辑 .raf 文件?
- javascript - 我想检查用户是否使用 firebase 登录
- docker - 如何在 Github Action 上登录 pull registry 以获取服务
- regex - 正则表达式与字符串中第一个点之后的数字完全匹配
- angular - 模板中一个字符串的超链接文本
- python - 按顺序读取源文件夹
- python-3.7 - 正则表达式搜索多个模式
- css - 行之间的材料表空间
- javascript - 具有构造函数以及 HTML 和 CSS 文件的组件数组。错误 NG2003。ngFor
- java - maven compile 有时会失败,有时会成功