ИТАК после прочтения этих предыдущих вопросов:Бесконечный цикл при попытке очистить входной буфер
Alternate method for clearing input buffer in c
How to clear input buffer in C?
я придумал кусок кода, чтобы очистить буфер ввода и сосчитать, как многие значения были в буфере, а затем вернули это число. Затем производится сравнение, чтобы проверить, превысило ли число допустимое число.
#include <stdio.h>
#include <stdlib.h>
int Empty();
int main()
{
double x;
int y=0;
while(y==0)
{
y=1;
if(scanf("%lf",&x)!=1 || Empty()>1) //checks if the value is acceppted
// and then attempts to empty
// the input buffer. I always expect
//at least 1 returned due to the
// EOF or '\n'
{
fprintf(stdout,"Invalid character(s) entered, please re-enter.\n");
y=0;
}
}
return(x);
}
int Empty()
{
int clearr,n=0;
do
{
n++;
}while((clearr=fgetc(stdin))!= EOF && clearr !='\n'); // If EOF or '\n' is reached
// it ends, returning the
//number of characters
return(n);
}
Если я запустил программу и введите 2 или 2.2 и т.д., номер принимается и возвращается.
Если я вхожу 2, или 2 а или 2 2 и т.д. он всегда ловит пространство/письмо/и т.д., и заставляет одну петлю, чтобы позволить вам попробовать и повторно значение
Если, однако, если ввести обижая элемент, то есть a, сначала происходит бесконечный цикл.
Это не имеет для меня никакого смысла, поскольку, как я понимаю, когда fgetc(stdin)
называется, он ДОЛЖЕН вытягивать либо символ, либо EOF
, который означал бы, что был введен только один элемент, заканчивающийся циклом.
Откуда вы знаете, что это петли? – EOF
Он печатает f «Введен неверный символ (ы), пожалуйста, заново введите. \ N" бесконечно – Hobojoe