Jump to content
ext4t1c0

parar a meio de um scanf

Recommended Posts

ext4t1c0

Boas

tenho aqui um pequeno problema que me anda a dar dor de cabeça

neste scanf

scanf(" %c %d/%d", &oper, &num, &den);

como posso parar a leitura a seguir á leitura da primeira variável?

por exemplo a entrada normal seria + 2/3, mas por vezes queria ler apenas o char. se introduzir "a 0" funciona, mas queria apenas introduzir o "a".

como posso validar as variáveis? ( se o oper é char e se o num e den são inteiros?

um abraço

Share this post


Link to post
Share on other sites
Flinger

Return Value

These functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.

The value EOF is returned if the end of input is reached before either the first successful conversion or a matching failure occurs. EOF is also returned if a read error occurs, in which case the error indicator for the stream (see ferror(3)) is set, and errno is set indicate the error.

http://linux.die.net/man/3/scanf

Basicamente podes usar o valor de retorno do scanf para saber quantos inputs foram lidos com sucesso. Atenção que, no caso de falhar o primeiro, retorna logo 0, não tenta testar os seguintes.

na página encontras também as opções que podes usar para tentar "refinar" o match desses inputs.

Outra hipotese é usares o fgets para leres a linha inteira, e depois fazeres um parse mais refinado.

EDIT: tens outra hipótese, um bocado mais rebuscada, que passa pela utilização de analisadores léxicos e sintáticos (lex e yacc). Não sei até que ponto tens necessidade de ir por esta via, mas fica a referência...

http://en.wikipedia.org/wiki/Lex_(software)

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
Rui Carlos

Provavelmente o melhor seria usares o fgets, e depois validares e processares a string lida "manualmente" (isto caso não queiras ir para soluções como lex/yacc, como o Flinger sugeriu).

  • Vote 1

Share this post


Link to post
Share on other sites
brunoais

Para esse caso específico, eu usaria o que o Rui Carlos sugeriu.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.