Поскольку, когда ваш пользователь вводил имя пользователя, он также вводил символ Ввод (именно так его терминал знал, что нужно отправить строку).Этот символ не был прочитан cin >> name
и все еще находится в буфере.Затем getpass
читает его как первый символ и немедленно останавливается.
Обратите внимание, что ваш код не совпадает с кодом статьи, который не запрашивает имя пользователя, и показывает getpass
, чтоявляется довольно хрупким (например, он ломается при простом добавлении базового кода, который вы добавили, и, кажется, полагается на хаки termios , которые вы тихо удалили).Вообще старайтесь не учить C ++ из статей на сайтах.Изучите это из хорошей книги вместо этого!
Вы можете исправить это, добавив cin.ignore(256, '\n')
после cin >> name
, хотя, честно говоря, это немного хак, и этовозможно, было бы лучше извлечь имя пользователя, используя std::getline
.