Ir ao conteúdo
  • Cadastre-se

Usando scanf para capturar caracteres específicos do usuário


adrianofarias

Posts recomendados

E aê pessoal!

Estou precisando escrever um código em C que precisa capturar uma string

digitada pelo usuário.

O porém é que só quero capturar alguns caracteres específicos do usuário.

E quero capturar só caracteres alfanuméricos e desconsiderar pontuação e caractere o espaço branco.

Como posso formatar o scanf para capturar só os caracteres desejados.

Obrigado!

Link para o comentário
Compartilhar em outros sites

Não dá pra alterar o scanf assim.

O ideal seria você capturar tudo e depois fazer o programa filtrar da string o que você não quer.

Se essa não for uma alternativa, sobra apenas você criar o seu próprio método de input. Você pode fazer isso usando diretamente a api do windows/linux, ou usando essas bibliotecas tipo conio ou ncurses.

Link para o comentário
Compartilhar em outros sites

Eu conheço um código de formatação que permite capturar strings que contenham caracteres brancos.

É assim: scanf(" %[^\n]", x);(repare no espaço antes de '%').

Esse formatação também desconsidera caracteres brancos antes do primeiro caractere não branco de entrada.

Será mesmo que não existe uma formatação da forma que eu preciso?

Link para o comentário
Compartilhar em outros sites

Para capturar apenas o que você quer, eu não consegui fazer.

A cópia para a variável, do conteúdo lido, é sempre aborta no primeiro momento em que a expressão não bate.

O que eu consegui fazer foi, filtrar a leitura apenas para caracteres que se deseja:


scanf("%[0-9a-zA-Z ]{1,}[^\n]", qualquer);

Nesse caso, só aceitará 0-9, a-z, A-Z e espaço em branco, podendo repetir uma ou mais vezes, até abortar quando encontrar uma quebra de linha.

Essa verificação é expressão regular padrão POSIX. Dê uma procurada no google, talvez você encontre.

Tem o site do Aurélio Marinho, quem sabe lhe ajude:

http://aurelio.net/er/

Link para o comentário
Compartilhar em outros sites

A solução trabalhosa seria usar uma função de leitura que não mostra os valores, aí você interpreta e se estiver dentro do que você quer só então envia para o monitor e acrescenta à sua string. O usuário vai digitar algo, mas cada caractere só vai aparecer se for aceito, senão ele digita digita e o ponteiro fica lá piscando parado.

Link para o comentário
Compartilhar em outros sites

Não achei nenhuma maneira de capturar só os caracteres desejados só formatando o scanf.

Eu já conhecia essa formatação do scanf ScreenBlack, mas não serve pois

o scanf para de ler os dados digitados assim que encontra um caractere

indesejado.

A solução é mesmo criar um laço e algumas condições para aceitar o caractere

digitado, semelhante à sugestão de barutaji.

Valeu pessoal!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!