Для ввода информации в Competition::initCat()
Вы используете getline()
, который принимает весь буфер ввода.
Когда Вы вводите choice
, Вы набираете "1" и перевод строки. В то время как "1" переходит из буфера в переменную choice, в буфере остаётся '\n' (символ перевода строки). Именно этот символ принимает функция getline(cin, breed)
.
Для решения проблемы можно почистить строку после ввода choice используя cin.ignore()
.
В данном случае можно использовать cin.ignore(1000, '\n')
. Эта функция будет удалять символы из буфера до тех пор пока не встретит символ перевода строки, или пока не удалит 1000 символов. Однако этот способ не сработает если пользователь введёт число + 1000 пробелов + '\n', так как в таком случае символ перевода не удалится.
Во избежание данной проблемы вместо cin.ignore(1000, '\n')
, лучше использовать cin.ignore(numeric_limits::max(), '\n'). Этот вариант точно очистит всю строку вместе с '\n', но для его использования нужно подключить библиотеку:
#include <limits>