A set of C functions to read unformatted (keyboard) input. Provides safe, validated reading for every data type, replaces unsafe scanf with portable alternatives using PeekConsoleInput and custom scanning. Features character filtering, buffer overflow protection, and real-time validation.
- Definição: Organização de informações conforme especificações pré-definidas (geralmente para processamento computacional).
- Em C: Funções como
scanf()foram projetadas para ler entrada formatada (scan formatted input).
- Objetivo original: Ler entrada formatada (ex: arquivos estruturados), não entrada do teclado (que é livre).
- Riscos:
- Não valida a entrada — usuário pode digitar qualquer coisa (105+ teclas de liberdade).
- Pode corromper memória se a entrada não corresponder ao esperado.
- Retorna um
int(número de itens lidos) — ignorar esse retorno é um erro comum.
- Uso prático:
- Pode ser útil em casos controlados, mas não é adequado para aplicações robustas que exigem validação.
- Necessidade de ler caracteres sem esperar por Enter
- Validação em tempo real de entrada
- Controle preciso de tipos e intervalos
- Manipulação segura de strings
LerChar(),LerSChar(),LerUChar(): Leitura direta sem buffer- A implementação é baseada nas funções
WaitForSingleObject(), que apenas aguarda por um evento no buffer de entrada, ePeekConsoleInput, que apenas "espia" o que há na stdin para poder validar um evento do teclado, sem de fato tentar ler e consumir desnecessariamente como a maioria das funções de leitura fazem. - Solução portável alternativa ao
getch()daconio.h, mas esta biblioteca não é portável e não faz parte de padrão nenhum.
LerString(),LerSString(),LerUString()- Parâmetros
scanset(caracteres permitidos) enscanset(caracteres proibidos) para filtragem:scanset!= NULL &&nscanset== NULL: somente os caracteres apontados porscansetsão permitidos.scanset== NULL &&nscanset!= NULL: somente os caracteres não apontados pornscansetsão permitidos.scanset== NULL &&nscanset== NULL: quaisquer caracteres são permitidos.
- Controle de tamanho máximo para prevenção de overflow.
- Funções para todos os tipos numéricos padrão C.
- Validação de intervalos (
minval,maxval) em tempo real, ou seja, o usuário é impedido de digitar qualquer valor fora do intervalo. Valores fora do intervalo não serão impressos na stdout. - Conversão segura de strings para valores numéricos.
- Macro
gets(), baseada emfgets(), porém mais segura e com limpeza do buffer de entrada. - Função
Getch(), que desabilita Line Input para que não seja necessário teclar Enter e Echo Input para que o caractere não seja impresso, e então lê comReadConsole(). Tem o mesmo efeito dagetch()daconio.h, mas usa a WinAPI. - Função
LerStr(), com mesma implementação dagets(), porém retorna um ponteiro.
O exemplo a seguir segue a implementação encontrada nesse repositório.