Как очистить буфер scanf() ? - C (СИ)

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

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

Мне нужно, чтобы scanf() вызывался до тех пор, пока не будет введено целое число, но происходит зацикливание.
while (scanf("%d", &n) != 1 )
    {
        printf("Error\nInput n: ");
    }
fflush(stdin) - не помогает scanf( "%*[^\n]" ); - помог, но я не понимаю, как это работает.
while (scanf("%d", &n) != 1)
    {
        scanf("%*[^\n]");
        printf("Error\nInput n: ");
    }
Есть ли более простой способ очистить буфер?

Решение задачи: «Как очистить буфер scanf() ?»

textual
Листинг программы
#include<stdio.h>
  
  float myFunc(void);
  
 int main (void)
  {
  int a;
   a = 0;
  
 while (myFunc() != 1) {
 puts("Repeat enter");
  }
  return 0;
 }
 
float myFunc (void)
 {
 float a, c;
 int b;
 
 scanf("%f", &a);
 b = a;
 if ((c = (b / a)) > 0)
 return c;
 else
  return 0;
  }

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

В этом коде:

  1. #include - это включение стандартной библиотеки файлов, которая содержит функции для ввода и вывода данных.
  2. float myFunc(void); - это функция с именем myFunc, которая возвращает значение типа float (число с плавающей точкой) и не принимает аргументов.
  3. int main (void) - это функция с именем main, которая возвращает значение типа int (целое число) и не принимает аргументов.
  4. int a; - это объявление переменной с именем a типа int (целое число).
  5. a = 0; - это присваивание переменной a значение 0.
  6. while (myFunc() != 1) { - это цикл while, который будет выполняться до тех пор, пока функция myFunc не вернет значение 1.
  7. puts(Repeat enter); - это функция для вывода строки на экран.
  8. return 0; - это выход из функции main с возвратом значения 0.
  9. float myFunc (void) - это определение функции myFunc.
  10. scanf(%f, &a); - это функция для ввода данных с помощью клавиатуры, в данном случае вводится число с плавающей точкой в переменную a.
  11. b = a; - это присваивание переменной b значение переменной a.
  12. if ((c = (b / a)) > 0) - это условная конструкция if, которая проверяет, что результат деления b на a больше 0.
  13. return c; - это возврат значения переменной c из функции myFunc.
  14. else - это часть условной конструкции if, которая выполняется, если результат деления b на a меньше или равен 0.
  15. return 0; - это возврат значения 0 из функции myFunc.
  16. } - это закрытие цикла while в функции main.
  17. } - это закрытие функции main.
  18. } - это закрытие определения функции myFunc.
  19. } - это закрытие файла, в котором написан код.
  20. } - это конец программы.

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


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

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

10   голосов , оценка 4.5 из 5
Похожие ответы