Почему 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 неверно, попробуйте опять: ");
}