Ввод значения в си, проблема с 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");
Взял отсюда.