Функция scanf + проверка на ввод данных - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Как я понимаю: использовать scanf + массив для проверки на корректность ввода - неудачная идея. Она не чистит буфер, который предоставляет stdio ( ни совсем понимаю чего там происходит )).
#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("Успех!");
}
Неужели единственный способ корректной проверки, это использовать функции read или getс, посимвольно считывать в массив, и потом уже проверять ??

Решение задачи: «Функция scanf + проверка на ввод данных»

textual
Листинг программы
 while ( (scanf("%d",&n) ) != 1 ) {
        printf("Неверное введенное значение, попробуйте еще: ");
        while(getchar() != '\n')
              ;
}

Объяснение кода листинга программы

  1. Запускается цикл while
  2. Внутри цикла происходит попытка чтения числа с помощью функции scanf и сохранение его в переменной n
  3. Если чтение прошло успешно (возврат функции scanf равен 1), то цикл прекращается
  4. Если чтение не удалось (возврат функции scanf не равен 1), то выводится сообщение об ошибке на экран
  5. После вывода сообщения об ошибке происходит пропуск символа новой строки с помощью функции getchar
  6. Цикл продолжается до тех пор, пока не будет введено корректное значение

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

7   голосов , оценка 4.143 из 5