Функция scanf + проверка на ввод данных - C (СИ)
Формулировка задачи:
Как я понимаю: использовать scanf + массив для проверки на корректность ввода - неудачная идея. Она не чистит буфер, который предоставляет stdio ( ни совсем понимаю чего там происходит )).
Неужели единственный способ корректной проверки, это использовать функции read или getс, посимвольно считывать в массив, и потом уже проверять ??
#include <stdio.h> int main(void){ int n; // Вариант с выходом из программы - все работает printf("Введите значение: "); if ( (scanf("%d",&n) ) != 1 ){ printf("Неверное введенное значение"); return 1; } // проверка с использованием цикла - зацикливает printf("Введите значение: "); while ( (scanf("%d",&n) ) != 1 ) printf("Неверное введенное значение, попробуйте еще: "); printf("Успех!"); }
Решение задачи: «Функция scanf + проверка на ввод данных»
textual
Листинг программы
while ( (scanf("%d",&n) ) != 1 ) { printf("Неверное введенное значение, попробуйте еще: "); while(getchar() != '\n') ; }
Объяснение кода листинга программы
- Запускается цикл while
- Внутри цикла происходит попытка чтения числа с помощью функции scanf и сохранение его в переменной n
- Если чтение прошло успешно (возврат функции scanf равен 1), то цикл прекращается
- Если чтение не удалось (возврат функции scanf не равен 1), то выводится сообщение об ошибке на экран
- После вывода сообщения об ошибке происходит пропуск символа новой строки с помощью функции getchar
- Цикл продолжается до тех пор, пока не будет введено корректное значение
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д