std::getline()
вход только «пропускает», если в потоке есть ведущая строка новой строки, которая предшествует введенному вами входу. Это может произойти, если вы ранее выполнили форматированное извлечение, которое оставило остаточную новую строку. По умолчанию std::getline()
ограничивает извлечение при приобретении символа новой строки.
ignore()
- это функция, которая отбрасывает определенное количество символов (по умолчанию сумма для сброса равна 1). Если вы используете это ранее неформатированное извлечение (например, std::getline()
), но после извлечения (например, std::istream::operator>>()
), это позволит считывать данные так, как вы ожидаете, потому что они будут отбрасывать остаточную новую строку.
Об этом подробно расскажу в my answer here.