do-while удобно применять когда например есть пользовательский ввод и есть реакция на ошибу. Где нужно ввод
повторить. Например
do {
s = input("Enter your bidthday: ")
} while(!isValidDate(s));
Еще я использовал для простого I/O когда надо что-то по-символьно читать и проверять
что файл не закончился (результат не отрицательный).
В последних версиях Scala (3.x) мусье Одерский внезапно зобанил оператор цикла с постусловием.
Я уж не помню как он это аргументировал.
В качестве альтернативы предлагалось делать такой композитный предикат который делает
сначала действие а потом проверяет.
while ({ <body> ; <cond> }) ()
Еще дальше пошел Дейкстра. Он придумал специальный вид do-while для конечных автоматов.
Такой себе гибрид do-switch-case-while. Где можно как в DSL описать исходящие переходы.
Правда я не помню где он его реализовал.
UPD: Ошибочка. Не Вирт а Дейстра. Путаю их.