Войти

Показать полную графическую версию : [решено] fgets и ограничение на ввод


kennydzzze
30-04-2016, 19:07
Нужно ограничить ввод строки пользователем до трех символов, при этом все они должны быть только цифрами. Выделять строке память вручную не подходит, ибо может случится переполнение буфера, а выделять строке тысячи символов не считаю правильным решением. Для этого решил использовать fgets, но столкнулся с проблемой: ошибка выводится несколько раз, как будто после выхода из цикла for из stdina продолжает считываться остаток строки (после первых трех символов введенной строки). Как можно запретить это?
п.с. getch и getche не подойдут, ибо пишу на unix с gcc компилятором, а работать c библиотекой ncurses.h нежелательно.

#include <stdlib.h>
#include <stdio.h>

int main()
{
const int length=3;

char *str=(char *)malloc((length+1)*sizeof(char));

int i=0;
int rule=1;
while (rule)
{
str=(char *)malloc((length+1)*sizeof(char));

fgets(str, (length + 1), stdin);

for (i=0; i < (length + 1); i++)
{
if (str[i] == '\0')
{
rule=0;
break;
}

if (str[i] < '0' || str[i] > '9')
{
printf("ERROR\n");
free(str);
break;
}
}
}

printf("%s",str);
free(str);

system("pause");
return 0;
}

kennydzzze
30-04-2016, 23:15
Проблему решил благодаря этому

fgets(str, (length + 1), stdin);
fflush(stdin);




© OSzone.net 2001-2012