Это условие никогда не может привести к значению «ложь», что, конечно, приводит к бесконечному циклу while. И это только часть вашего состояния ORed.
whatToDo != 'U' || whatToDo != 'A'
Требуется, чтобы whatToDo
был в то же время идентичным «U» и «A».
Что вывероятно, требуется
whatToDo != 'U' && whatToDo != 'A'
"до тех пор, пока whatToDo не является ни A, ни U ..." в соответствии с эквивалентностью
!A && !B
и
!(A || B)
последнее является более очевидным выражением для «NOR».