Все работает правильно. ReadLn отрабатывает как надо. А дело вот в чем: выше по тексту программы ты используешь read, а он, зараза такая, когда читает с клавиатуры игнорирует перевод каретки, но, вот ведь сволочь-то, оставляет его в буфере. И когда дело доходит то твоего ReadLn в буфере уже лежит перевод каретки и создаётся ощущение что ничего не отработало. Хотя все отработало на "Ура".
Либо замени read на readln, либо добавь еще один readln в конце программы.