Я думаю, вы должны добавить что-то вроде этого:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
после вашего cin >> choice
Причина этого в том, что пользователь фактически ввел «D \ n», но только «D» вписывается в переменную выбора, поэтому «\ n» попадает в буфер cin.
когда вы вызываете getline, getline видит, что '\ n' в буфере, и возвращает ничего, кроме него ...
этот вызов удалит все '\ n', которые находятся в буфере cin.
Это объяснено довольно хорошо здесь
другое решение будет выглядеть примерно так:
char newline;
cin >> choice;
cin.get(newline);
Это удалит только один '\ n' из буфера .. (так как cin >> choice
добавил один \n
)