Основной ввод строки

Я только что наткнулся на этот фрагмент кода, который позволяет пользователям вводить строки в командной строке. Я знаю о том, что они делают, и это все замечательно. Но у меня есть вопрос относительно функций cin и getline ().

string name ;
cout << "Please enter your full name: " ;
cin >> name ;
cout << "Welcome " << name << endl ;
cout << "Please enter your full name again please: " ;
getline(cin , name) ;
cout << "That's better, thanks " << name << endl ;
return 0 ;

Теперь, когда это вывод, я получаю что-то вроде: (используя Джон Смит в качестве ввода)

Please enter your full name: john smith
Welcome John
Please enter your full name again: That's better thanks Smith

Я понимаю, почему это происходит, getline все еще читает из входного буфера, и я знаю, как это исправить. Мой вопрос: почему после "Пожалуйста, введите ваше полное имя еще раз:"? Когда я изменяю код на:

string name ;
cout << "Please enter your full name: " ;
cin >> name ;
cout << "Welcome " << name << endl ;
cout << "Please enter your full name again please: " ;
cin.ignore( 256, '\n') ;
getline(cin , name) ;
cout << "That's better, thanks " << name << endl ;
return 0 ;

Внезапно я получаю новую строку после того, как вы снова вводите свое полное имя. Это не очень большая проблема, если честно. Но я не против узнать, что случилось, если кто-нибудь сможет мне помочь. Спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос