У меня есть небольшая C-программа, которая просто читает числа из стандартного ввода, по одному в каждом цикле цикла. Если пользователь вводит некоторое значение NaN, на консоль должна быть выведена ошибка, и запрос ввода должен вернуться снова. При вводе «0» цикл должен завершиться, и количество заданных положительных / отрицательных значений должно быть выведено на консоль. Вот программа:
#include <stdio.h>
int main()
{
int number, p = 0, n = 0;
while (1) {
printf("-> ");
if (scanf("%d", &number) == 0) {
printf("Err...\n");
continue;
}
if (number > 0) p++;
else if (number < 0) n++;
else break; /* 0 given */
}
printf("Read %d positive and %d negative numbers\n", p, n);
return 0;
}
Моя проблема в том, что при вводе некоторого числа (например, «a») это приводит к бесконечной циклической записи «-> Err ...» снова и снова. Я предполагаю, что это проблема scanf (), и я знаю, что эту функцию можно заменить на более безопасную, но этот пример для новичков, знающих только о printf / scanf, if-else и loop.
Я уже прочитал ответы на этот вопрос и пролистал другие вопросы, но на самом деле ничего не решило эту конкретную проблему.