Ввод значения в си, проблема с scanf_s

При вводе какого-либо знака, которое не является числом, scanf_s отказывается вызываться на следующем шаге, причина чего мне непонятна.

 for (int i = 0; i < N; i++) {
    int answer;
    int flag;
    do {
        flag = 1;
        printf("Выберите способ создания квадратов: \n");
        printf("1. Создание квадрата по координатам центра и длине.\n");
        printf("2. Создание квадрата по координатам центра и координатам точки, лежащей на границе этого квадрата.\n");
        printf("3. Создание квадрата(квадратной оболочки) для двух других квадратов. (Как минимум нужно иметь 2 квадрата)\n");
        printf("Ваш ответ: ");
        scanf_s("%d", &answer);  // СТРОКА, ГДЕ SCANF_S НЕ РАБОТАЕТ, ЕСЛИ БЫЛ ВВЕДЁН СИМВОЛ
        switch (answer) {
        // тут кейсы я убрал, чтобы не вставлять лишнее
        default:
            printf("Вы ввели некорректное значение.\n");
            flag = 0;
            break;
        }
    } while (flag == 0);
}

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

Автор решения: Mikhailo

Надо всегда проверять, все ли правильно прочитано - смотреть возврат функции scanf (_s). И если нет, или если потом идет чтение строки, то надо выполнять сброс.

Просто ошибка при чтении - и первый же не правильный символ остается в буффере. А сбросить до конца строки можно так

while(fgetc(file) != '\n');

или так

fscanf(stdin,"%*[^\n]");
fscanf(stdin,"%*c");

Взял отсюда.

→ Ссылка