Функция 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
- Цикл продолжается до тех пор, пока не будет введено корректное значение