Как очистить от лишнего

485
05 октября 2021, 12:10

Допустим, есть такой код:

char q [5]
char w [4];
cin.getline(q,4) //если вводим 1234567890
cin.getline(w,3)//Здесь оно само заполняется

Я столкнулся с проблемой, что если ввести колл-во символов больше чем выделено, то происходит заполнение последующей переменной автоматически. Если ввести меньше чем выделено то все норм. Как это можно обработать?

Answer 1

Во-первых, вы что-то выдумываете. Если вызов std::cin.getline завершился "досрочно", т.е. по достижению предельного размера буфера, а не по достижению конца строки, то в потоке std::cin будет выставлен failbit. Пока в потоке выставлен failbit никакие операции ввода выполняться не будут. Это приведет к тому, что второй вызов std::cin.getline ничего не прочитает вообще. Никакого "заполнения последующей переменной автоматически" не произойдет. Сбросить failbit можете только вы, но я у вас в коде ничего подобного не вижу.

Во-вторых, по вашему вопросу совершенно не ясно, в чем вы видите "проблему" и какое поведение вы хотите получить в результате. Но если задача состоит в том, чтобы пропустить непрочитанный первым вызовом std::cin.getline "хвост" строки, то после чтения начала вам нужно проверять failbit. Если он установлен, то сбрасывать его и делать

std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n')

P.S. Предельный размер в std::basic_istream<>::getline - это предельный размер буфера, а не предельная длина строки. То есть в вашем примере у вас либо буферы слишком большие, либо значения, передаваемые в getline слишком маленькие.

Answer 2

Проще всего считать всю строку, не ограничивая количество символов:

std::string s;
std::getline(std::cin, s);

А потом доставать нужное количество символов из s.

READ ALSO
Нужна помощь в проверке кода

Нужна помощь в проверке кода

Написал решение этой задачи:компьютер задает случайное число в десятичной системе счисленияВыводит его на экран и даёт пользователю задание:"Вам...

259
Как получить список игр, которыми владеет пользователь Steam

Как получить список игр, которыми владеет пользователь Steam

Как получить список игр, которыми владеет пользователь Steam с помощью Steam API?

209
Static или Private

Static или Private

Я большой фанат C, и не совсем понимаю, зачем нам использовать private методы? Делать для них геттеры и сеттеры, и остальные абсолютно(по-моему...

180
С++ работа с памятью, шаблоны

С++ работа с памятью, шаблоны

Здравствуйте! Пожалуйста можете объяснить почему size(a) возвращает 8, а sizeof(a) - 40? И как внутри шаблона функции получить информацию об использованной...

192