C ++:如何清除缓冲区

时间:2018-12-04 16:23:53

标签: c++ string char buffer clear

我有下一个代码:

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内字符串的其他部分。如何清洁缓冲液?

1 个答案:

答案 0 :(得分:1)

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