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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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