peek
смотрит на символ, не удаляя его из потока .Этот код проверяет, чтобы убедиться, что следующий символ в потоке является концом файла или концом строки, не извлекая символ из потока и не повреждая последующий допустимый ввод.
Он не может принять число с плавающей запятой, потому что cin >> NumChild
прочитает int
и остановится, как только достигнет десятичной точки.Пример: введите «3.14».numChild
будет содержать 3. ".14" остается в потоке, поэтому peek будет читать '.'
, а не конец файла или новую строку, и печатает сообщение об ошибке.
Затем оно продолжаетсяс остальной частью программы, потому что ничто не сказало это остановить.Вам необходим цикл вокруг ввода, чтобы продолжать запрашивать больше ввода, пока не будет предоставлен действительный ввод.
Простой пример:
bool goodInput = false;
while (!goodInput)
{
your code here
if (cin.peek() == EOF|| cin.peek() == '\n' )
{
goodInput = true; // change made here
}
your code here
}