Página 1 de 1

Tabuada do 5 em C - CCS do livro do Fábio

MensagemEnviado: 28 Fev 2007 19:28
por Lorin
Pessoal,

estou com uma dúvida no programa da página 112 do livro PIC - Programação em C do Fábio Pereira:

4) O programa seguinte imprime alguns valores na tela. Pressionando a tecla 5, quais são os valores impressos?


#include <16f877a.h>
#use delay(clock=4000000,restart_wdt)
#fuses xt,nowdt,put,nobrownout,nocpd,nolvp,nowrt,noprotect
#use rs232(baud=19200,parity=N,xmit=pin_c6,rcv=pin_c7)

main()
{
int x,y;
while ((y = (getc()-48)) > 0)
for (x = 0; x<=10; ++x) printf ("%u x %u = %u\r\n",y,x,x*y);
printf ("FIM");
}

O resultado no programa siow/CCS é o seguinte:

Imagem

Onde estou voando é nessa linha: while ((y = (getc()-48)) > 0)

A função getc() aguarda a chegada de um caractere pela porta serial padrão e retorna o seu valor.

Não estou entendendo as operações realizadas dentro dos parentesis, a ordem de precedência...como é que depois disso há o retorno do 5 e impressão da tabuada do mesmo pela printf?

obrigado!

Sdçs

MensagemEnviado: 28 Fev 2007 21:40
por tcpipchip
48 é codigo ASCII de "0"
TCPICHIP

MensagemEnviado: 28 Fev 2007 21:41
por ric_vas
A função getc() fica aguardando que você pressione um caractere. Quando você pressiona 5 a função getc() retorna a o valor ASCII para 5 (35 hexadecimal ou 53 decimal). Deste valor é subtraído 30 hexadecimal (48 decimal) o que resulta em 5. Como é maior que 0 é feito o loop de 0 a 10 gerando a tabela.

O loop while é reiniciado.

Ric

MensagemEnviado: 01 Mar 2007 11:21
por Lorin
Aaahh! agora clareou!

Obrigado tcpipchip e ric_vas pelas respostas!

Então eu posso dizer que a função getc() efetua a leitura de dados em ASCII (pois, a entrada de dados é pelo teclado do PC) mas as contas/operações dos parentesis internos são feitas em decimal/hexadecimal.

Blz!