C ++: как очистить буфер - PullRequest
       23

C ++: как очистить буфер

0 голосов
/ 04 декабря 2018

У меня есть следующий код:

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;

Если я пишу для примера 'cemfkem' в строке 2, в shapeetype у меня есть c, а другая часть строки остается в буфере, поэтому, когда яПопадая в столбец col, nam и rad, буфер попадает внутрь столбца в другую часть строки.как я могу почистить буфер?

1 Ответ

0 голосов
/ 04 декабря 2018

Таким образом, вы используете 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');
...