Как очистить буфер scanf() ? - C (СИ)
Формулировка задачи:
Мне нужно, чтобы scanf() вызывался до тех пор, пока не будет введено целое число, но происходит зацикливание.
fflush(stdin) - не помогает
scanf( "%*[^\n]" ); - помог, но я не понимаю, как это работает.
Есть ли более простой способ очистить буфер?
while (scanf("%d", &n) != 1 )
{
printf("Error\nInput 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;
}
Объяснение кода листинга программы
В этом коде:
- #include
- это включение стандартной библиотеки файлов, которая содержит функции для ввода и вывода данных. - float myFunc(void); - это функция с именем myFunc, которая возвращает значение типа float (число с плавающей точкой) и не принимает аргументов.
- int main (void) - это функция с именем main, которая возвращает значение типа int (целое число) и не принимает аргументов.
- int a; - это объявление переменной с именем a типа int (целое число).
- a = 0; - это присваивание переменной a значение 0.
- while (myFunc() != 1) { - это цикл while, который будет выполняться до тех пор, пока функция myFunc не вернет значение 1.
- puts(
Repeat enter); - это функция для вывода строки на экран. - return 0; - это выход из функции main с возвратом значения 0.
- float myFunc (void) - это определение функции myFunc.
- scanf(
%f, &a); - это функция для ввода данных с помощью клавиатуры, в данном случае вводится число с плавающей точкой в переменную a. - b = a; - это присваивание переменной b значение переменной a.
- if ((c = (b / a)) > 0) - это условная конструкция if, которая проверяет, что результат деления b на a больше 0.
- return c; - это возврат значения переменной c из функции myFunc.
- else - это часть условной конструкции if, которая выполняется, если результат деления b на a меньше или равен 0.
- return 0; - это возврат значения 0 из функции myFunc.
- } - это закрытие цикла while в функции main.
- } - это закрытие функции main.
- } - это закрытие определения функции myFunc.
- } - это закрытие файла, в котором написан код.
- } - это конец программы.