Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] fgets и ограничение на ввод (http://forum.oszone.net/showthread.php?t=314437)

kennydzzze 30-04-2016 19:07 2630963

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

#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< (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 2631022

Проблему решил благодаря этому
PHP код:

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



Время: 22:11.

Время: 22:11.
© OSzone.net 2001-