Допустим, есть такой код:
char q [5]
char w [4];
cin.getline(q,4) //если вводим 1234567890
cin.getline(w,3)//Здесь оно само заполняется
Я столкнулся с проблемой, что если ввести колл-во символов больше чем выделено, то происходит заполнение последующей переменной автоматически. Если ввести меньше чем выделено то все норм. Как это можно обработать?
Во-первых, вы что-то выдумываете. Если вызов 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 слишком маленькие.
Проще всего считать всю строку, не ограничивая количество символов:
std::string s;
std::getline(std::cin, s);
А потом доставать нужное количество символов из s.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости