Объясните как работает, не понятно.
Читал книгу, а тут резкие переходы на перечисление и структуры, ничего не понял из этой программы. Понял как работает цикл ввода, но не понимаю как работает NO, YES.

Никак NO и YES не работают.
NO - это 0, YES - 1 - там даже подписали.
Больше в типе itsaWord значений быть не может.
И следует использовать логический тип.
Оправдано в ситуации
enum itsaWord { ХРЕН_ЗНАЕТ, ДА, НЕТ }
Потому что это говнокод.
enum в данном случае нафиг не нужен.
enum - грубо говорят создает const int с именами в перечислениях и присваивает им целые числа по порядку, если не указанно другое число
enum days_of_week {mon = 1, tue, wed, thu, fri, sat, sun};
равносильно
const int mon = 1, tue = 2, wed = 3, thu = 4, ..sun = 7;
Потом можно использовать осмысленные названия вместо бесмысленных чисел
switch(day)
{
case mon:
...
...
...
break;
case sun:
...
...
...
break;
}
Перечисление начинает с нуля.
enum number { null, one, two, three, ten=10, eleven, twelve};
но как только вы указали другое число прибавление единицы уже идет с этого числа.
cout << null; - выведет 0
cout << two; - выведет 2
cout << ten; - выведет 10 так как я указал что далее идут перечисления с 10.
Аналогично я сделал и с днями. Указал что понедельник должен начинаться с единицы.
В данном случае у вас NO равно нулю, а YES равно единице. Но для двух значений нет смысла использовать перечисление. Проще использовать, как вам указали, bool.
bool itsaword;
itsaword = false; //itsaword = no
itsaword = true; //itsaword = yes