Проблема в том, что вы смешиваете вызовы getline () с использованием оператора >>.
Помните, что оператор >> игнорировал начальные пробелы, поэтому будет корректно продолжаться через границы строк. Но останавливает чтение после того, как ввод был успешно извлечен и, следовательно, не будет глотать завершающие символы '\ n'. Таким образом, если вы используете getline () после >>, вы обычно ошибаетесь, если не будете осторожны (сначала удалите не прочитанный символ '\ n').
Хитрость заключается в том, чтобы не использовать оба типа ввода. Выберите подходящий и придерживайтесь его.
Если это все числа (или объекты, которые хорошо работают с оператором >>), тогда просто используйте оператор >> (примечание: строка является единственным фундаментальным типом, который не симметричен с вводом / выводом (т. Е. Не воспроизводится красиво)).
Если входные данные содержат строки или комбинацию вещей, для которых потребуется getline (), тогда используйте только getline () и анализируйте число из строки.
std::getline(std::cin, line);
std::stringstream linestream(line);
int value;
linestream >> value;
// Or if you have boost:
std::getline(std::cin, line);
int value = boost::lexical_cast<int>(line);