首页 > 解决方案 > 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 的另一部分字符串。我怎样才能清理缓冲区?

标签: c++stringcharbuffer

解决方案


因此,您正在使用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');

推荐阅读