Ir para o conteúdo
ext4t1c0

parar a meio de um scanf

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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)

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.