Ir ao conteúdo
  • Cadastre-se

C Conjunto de caracteres permitidos e negados em apenas um scanset


Lucca Rodrigues
Ir à solução Resolvido por arfneto,

Posts recomendados

Olá.

Haveria alguma forma de, entre os colchetes do scanset, eu dizer quais conjuntos de caracteres eu quero e não quero?

Por exemplo, da seguinte forma, eu defino os conjuntos de caracteres que devem ser lidos:

scanf("%[a-z,0-9]", str);

E dessa outra forma, eu defino os conjuntos de caracteres que devem ser negados:

scanf("%[^a-z,0-9,-]", str);

Minha primeira dúvida é se a vírgula é realmente necessária, porque eu testei sem ela e funcionou. Algumas fontes dizem que precisa da vírgula e outras nem a usam.

Minha segunda dúvida é se há como especificar quais conjuntos de caracteres devem ser lidos e quais devem ser negados em apenas um scanset.

Obrigado desde já!

Link para o comentário
Compartilhar em outros sites

  • Solução

@Lucca Rodrigues Eu te mostrei a maneira de fazer isso naquele programa de menus que postei semanas atrás, em  C e C++

 

E não é scanf(). 

 

scanf formated input - esse é o objetivo de scanf(). Não deveria ser usada para algo que não fosse entrada formatada.

 

56 minutos atrás, Lucca Rodrigues disse:

Minha primeira dúvida é se a vírgula é realmente necessária, porque eu testei sem ela e funcionou

 

Não é que funcionou. A vírgula passa a fazer parte do conjunto :D tudo que está entre colchetes

 

57 minutos atrás, Lucca Rodrigues disse:

Minha segunda dúvida é se há como especificar quais conjuntos de caracteres devem ser lidos e quais devem ser negados em apenas um scanset

 

Não, não há. O '^'  só é processado como tal no início. E não tem um inversor.

 

 

O Windows lê do teclado em um modo chamado ENABLE_LINE_INPUTCOOKED MODE no Unix, Linux Android MacOS. Desse modo o programa só recebe algo da leitura ao aparecer um ENTER na entrada. 

 

E para caso como esse de filtros já pode ser tarde para o programa reagir.

 

Então pode desligar esse modo e ler via fgetc() sabendo que vai receber letra a letra... E aí é trivial reagir a cada letra que entra já que elas vem uma por vez...

 

Ou use a técnica que te expliquei quando dos menus, usando as funções de mais baixo nível.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...