Допустим, есть такой код:
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
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Написал решение этой задачи:компьютер задает случайное число в десятичной системе счисленияВыводит его на экран и даёт пользователю задание:"Вам...
Как получить список игр, которыми владеет пользователь Steam с помощью Steam API?
Я большой фанат C, и не совсем понимаю, зачем нам использовать private методы? Делать для них геттеры и сеттеры, и остальные абсолютно(по-моему...
Здравствуйте! Пожалуйста можете объяснить почему size(a) возвращает 8, а sizeof(a) - 40? И как внутри шаблона функции получить информацию об использованной...