Почему scanf считывает значение только первой переменной?
Если вам нужен ввод целых чисел, то читайте их в целые переменные через %d. Еще, scanf возвращает количество прочитанных значений. Т.е. сравнивать надо с тройкой, а не единицей.

Еще одна проблема: возможно, из-за настроек локализации, оно ждет десятичные запятые, а не точки. Попробуйте ввести "1,0 2,0 3,0" или "1 2 3".

И вообще весь ваш сценарий - это комбинация ошибок в пером и втором абзаце. Из за точек вместо запятых оно читает только первую переменную сначала, видит, что ввело 1 переменную и завершает цикл. При вооде "1 2 3" оно читает все переменные, но из-за ошибки в проверке (вы же хотите, чтобы одна прочиталась) читает опять. При повтороном вводе "1.0 2.0 3.0" оно читает только первую переменную и завершается. При этом в b и c остались значения от прошлого ввода.
while (scanf("%f %f %f", &a, &b, &c) != 1 || ...
В приведённом коде нет определений a, b и c. Они должны иметь тип float, чтобы формат %f scanf работал правильно.

если сначала ввести 1 2 3, то приложение выведет "Ошибка. Введите снова: "
как это исправить?

scanf возвращает число успешно отсканированных полей, возвращаемое scanf значение надо сравнивать с 3 в условии цикла.