Почему scanf_s пропускается?

Я написал код для нахождения сумы нисходящего ряда, которое имеет единственное входное значение - x, которое должно быть числом. Код работал при всех значениях, даже буквенных, поэтому я решил что нужно добавить проверку на корректность. Я заметил что если значение буквенное то x принимает значение 0. Собственно, в этом и заключалась моя проверка:

#include <math.h>
#include <stdlib.h>
int i;
float x, r, ad;// x - даное число
int main(void) {
    system("chcp 1251");
    printf("Введите значение x:");
    scanf_s("%f", &x);
    while (x == 0) { //<--цикл проверки на правильность вводимых данных тут
        printf("Значение x неверно, попробуйте опять:");
        scanf_s("%f", &x);
    }
    r = x;
    i = 0;
    while (1) {
        ad = pow(-1, i) * ((pow(x, i + 1)) / pow(2, i));
        if (fabs(ad) > 0.0001) {
            i++;
            r += ad;
        }
        else {
            break;
        }
    }
    printf("%f", r);
}

Но почему-то при вводе букв scanf_s перестает работать, точнее пропускается. Начальный фрагмент роботы:

Введите значение x:a
Значение x неверно, попробуйте опять:Значение x неверно, попробуйте
опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:Значение x неверно, попробуйте опять:

Пример нормальной роботы:

Введите значение x:1
1.666626

Ответы (1 шт):

Автор решения: Qwertiy
printf("Введите значение x: ");

while (!scanf_s("%f", &x)) {
  scanf_s("%*s");
  printf("Значение x неверно, попробуйте опять: ");
}
→ Ссылка