Вы можете добавить
cin.ignore(1);
или
cin.ignore(INT_MAX, '\n');
, прежде чем позвонить cin.get()
.Это будет игнорировать новую строку слева от пользователя, вводящего второе число или все символы в буфере до новой строки.
Также вам не нужно ни сравнивать возвращаемое значение get
с '\n'
, ни ставить егов петле.Пользователь должен нажать Enter для get
, чтобы вернуться, поэтому
cout << "Press enter to exit...";
cin.ignore(INT_MAX, '\n');
cin.get();
Достаточно.
Что произойдет, если вы сделаете
cout << "Press enter to exit...";
while (wait)
{
if (cin.get() == '\n')
wait = false;
}
Это то, что цикл введен, и cin.get()
вызывается.Пользователь может ввести любое количество текста в консоли, как он хочет.Скажем, они ввели
Hello
в консоли.Затем пользователь нажимает клавишу Enter.cin.get()
возвращает H
, а ello\n
остается в буфере.Вы сравниваете H
с \n
и видите, что они не равны, продолжаете цикл.cin.get()
вызывается, и поскольку в буфере уже есть текст, немедленно возвращается e
.Этот цикл продолжает тратить время до тех пор, пока не достигнет последнего символа буфера, равного \n
, и сравнивает значение true с \n
, поэтому цикл прерывается.Как видите, это пустая трата времени.
Если вы поместите cin.get()
в цикл и сравните его возвращаемое значение с \n
, существует также опасность того, что cin
придетв конец файла до \n
.Я полагаю, что влияние этого на вашу программу будет бесконечным циклом, но я не уверен, так как я не могу попробовать это в Windows.
Кроме того, даже если вам не нужно использовать циклво-первых, вы тратите еще больше времени на bool
, потому что вы можете уменьшить цикл до
while (true)
if (cin.get() == '\n') break;