cin.ignore()
в основном очищает любые входы, оставшиеся в памяти. В первом фрагменте кода вы ничего не вводили, поэтому ему нечего будет очищать, и из-за этого он ждет, чтобы вы что-то вносили. Во втором фрагменте кода вы использовали оператор >>
, который получает сформированный ввод, но оставляет символ конечной линии '\n'
(тот, который хранится при нажатии ENTER), блуждающий во входном буфере. Когда вы вызываете cin.ignore(), он выполняет это задание и очищает тот же самый буфер. Поскольку он уже сделал то, к чему он был вызван, он просто позволяет программе продолжить (в этом случае до конца). Помните, что cin.ignore()
предназначен для очистки входного буфера (небольшой фрагмент памяти, который содержит вход), если вы хотите, чтобы пользователь вводил что-то до того, как программа двигается при использовании cin.get()
.
Вы также должны знать это:
При использовании:
->cin<<
вы должны вызвать cin.ignore() после этого, потому что он не потребляет символ конца строки «\ п», которая будет потребляться в следующий раз, когда вы попросите ввести причину нежелательных результатов , таких как программа, не дождавшись, когда вы что-нибудь введете.
->cin.get()
вы не должны вызывать cin.ignore(), так как он потребляет «\ п»
->getline(cin,yourstring)
(получает целую строку ввода, включая линии символа конца), вы также не должны использовать КИН. ignore()
Спасибо за ваш ответ. Кроме того, я могу просто использовать cin.ignore(); два раза, и это решит проблему, примерно так: cout << "Нажмите Enter To Exit ..."; cin.ignore(); cin.ignore(); – Nofuzy
Если во входном буфере нет ничего, пользователь должен будет ввести два символа для работы, тогда как 'sync' очищает все левые и затем' get' считывает, пока пользователь не попадет в enter. – chris
['cin.sync()' отбрасывание необработанного ввода зависит от MSVC] (http://en.cppreference.com/w/cpp/io/basic_istream/sync#Notes). – xskxzr