Как избежать ввода недопустимых символов? - C (СИ)
Формулировка задачи:
Написал тут функцию. При вводе целых чисел все нормально работает. Если пользователь вводит какой-либо символ, то программа зацикливается. Как этого избежать?
int entervar(int c,int d){ int z; printf("\nВведите вариант ответа: "); scanf("%d", &z); while ((z<1) || (z>c)){ printf("\nНет такого варианта ответа!"); printf("\nВведите вариант ответа: "); z=0; scanf("%d", &z); } else printf("Введено недопустимое значение!"); printf("%d",z); }
Решение задачи: «Как избежать ввода недопустимых символов?»
textual
Листинг программы
#include <stdio.h> void flush_input(void) { char c; while ( scanf("%c", &c) == 1 && c != '\n' ) ; } int main(void) { int value, ret; do { printf("Value: "); ret = scanf("%d", &value); flush_input(); } while ( ret != 1 && printf("WRONG INPUT!\n") ); printf("Do something with value of %d\n", value); return 0; }
Объяснение кода листинга программы
В этом коде реализована функция flush_input
, которая используется для очистки буфера ввода. Это необходимо, чтобы избежать ввода недопустимых символов.
В функции main
программа запрашивает у пользователя ввод целого числа с помощью функции scanf
. Если ввод некорректен (например, пользователь вводит буквы вместо цифр), то функция flush_input
очищает буфер ввода, пропуская все недопустимые символы. Затем программа снова запрашивает ввод числа. Это продолжается до тех пор, пока не будет введено корректное число.
Если ввод корректен, программа выводит сообщение Do something with value of X
, где X - это введенное число.
Список действий:
- Включаем заголовочный файл
. - Определяем функцию
flush_input
, которая очищает буфер ввода. - В функции
main
запрашиваем у пользователя ввод числа с помощью функцииscanf
. - Если ввод некорректен, вызываем функцию
flush_input
. - Если ввод корректен, выводим сообщение
Do something with value of X
, где X - это введенное число. - Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д