cin.ignore()
в основном очищает любой ввод, оставленный в памяти.В первом фрагменте кода вы ничего не вводили, следовательно, ему нечего будет очищать, и поэтому он ожидает, что вы что-то введете.Во втором фрагменте кода вы использовали оператор >>
, который получает форматированный ввод, но оставляет символ конца строки '\n'
(тот, который сохраняется при нажатии клавиши ENTER), блуждая во входном буфере.Когда вы вызываете cin.ignore (), он выполняет свою работу и очищает тот же буфер. Поскольку он уже сделал то, что ему было вызвано, он просто позволяет программе продолжаться (в данном случае до конца).Помните, cin.ignore()
предназначен для очистки буфера ввода (небольшого фрагмента памяти, в котором хранятся входные данные), если вы хотите, чтобы пользователь что-то вводил до того, как программа переходит на использование cin.get()
.
. Вы также должны знать это:
Если вы используете:
-> cin<<
, вам следует позже вызвать cin.ignore (), поскольку он не использует символ конца строки '\ n', который будет использован при следующем запроседля ввода, вызывающего нежелательные результаты, такие как программа, не ожидающая, что вы что-либо введете.
-> cin.get()
вы не должны вызывать cin.ignore (), так как она использует '\ n'
-> getline(cin,yourstring)
(получает всю строку ввода, включая символ конца строки), вы также не должны использовать cin.ignore ()