Чтобы исправить это, вам нужно проверить, чтобы scanf () действительно считывал нужные значения. scanf () возвращает количество успешно прочитанных элементов. Так что сохраните возвращаемое значение, проверьте, равно ли оно 1. Если это 0, то 0 элементов были прочитаны, и вам нужно очистить поток перед повторной попыткой. (редактировать: ну, возможно, не обязательно очищать его, но, по крайней мере, избавиться от оскорбительных данных в потоке)
Как уже говорили другие, он пытается прочитать целое число, видит 'a'
, не может прочитать целое число, но затем 'a'
все еще находится в потоке при следующей попытке.