cout << "play again? Enter 'yes' or 'no'" << endl;
} while (cin >> resp && resp[0] == 'y');
Для повторного запроса на продолжение игры используем цикл do while
(см. раздел 5.4.4).
Одна из причин использования в этой программе распределения bernoulli_distribution
заключается в том, что это предоставит программе лучший шанс пойти первой:
bernoulli_distribution b(.55); //
//
Такое определение b
предоставит программе 55/45 шансов на первый ход.
Упражнение 17.31. Что случилось бы в программе игры данного раздела, будь объекты b
и е
определены в цикле do
?
Упражнение 17.32. Что случилось бы, будь строка resp
определена в цикле?
Упражнение 17.33. Напишите версию программы преобразования слова из раздела 11.3.6, допускающую несколько преобразований для заданного слова и случайно выбирающую применяемое преобразование.
17.5. Еще о библиотеке ввода и вывода
Глава 8 познакомила вас с базовой архитектурой и наиболее часто используемой частью библиотеки ввода-вывода. В этом разделе рассматриваются три более специализированных средства, поддерживаемых библиотекой ввода-вывода: управление форматом, не форматированный ввод-вывод и произвольный доступ.
17.5.1. Форматированный ввод и вывод
Кроме флага состояния (см. раздел 8.1.2), каждый объект iostream
имеет также флаг формата, контролирующий подробности формата ввода и вывода. Флаг формата контролирует такие аспекты, как формат записи целочисленных значений, точность значений с плавающей запятой, ширина выводимого элемента и т.д.
Библиотека определяет набор перечисленных в табл. 17.17 и 17.18
Таблица 17.17. Манипуляторы, определенные в объекте iostream