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

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

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

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

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

textual
Листинг программы
  1. #include<stdio.h>
  2.  
  3.   float myFunc(void);
  4.  
  5.  int main (void)
  6.   {
  7.   int a;
  8.    a = 0;
  9.  
  10.  while (myFunc() != 1) {
  11.  puts("Repeat enter");
  12.   }
  13.   return 0;
  14.  }
  15.  
  16. float myFunc (void)
  17.  {
  18.  float a, c;
  19.  int b;
  20.  
  21.  scanf("%f", &a);
  22.  b = a;
  23.  if ((c = (b / a)) > 0)
  24.  return c;
  25.  else
  26.   return 0;
  27.   }

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

В этом коде:

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы