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;
}
п.с. 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;
}