4.11. Escreva um programa em C que escreva na tela toda a tabela ASCII (0..255 chars), escrevendo em cada linha o código ascii e o caractere correspondente.

Exemplo:

...

65 --> A

65 --> B

65 --> C

...

A fim de que o usuário possa ver todos os caracteres escritos, a tela deve ser parada de 20 em 20 linhas, até que o usuário pressione a tecla ‘c’ ou ‘C’ seguida de para continuar a mostrar os próximos 20 caracteres (20 linhas).

Passo 1

Vamos lá.

O código ascii é um código que para cada número temos um caractere associado. A gente consegue fazer a conversão com o comando c h a r . Olha só, se a gente escreve um programa do tipo:

i n t   i = 65 ;

p r i n t f ( %c ,   c h a r   i )

A saída é a letra ‘A’. Olha só, a gente tem que estar sempre atento ao tipo das coisas, primeiro a gente declara que i é uma variável do tipo inteira, mas depois a gente pede para que escreva na tela uma variável do tipo caractere, como um programa assim pode funcionar?

A resposta é o comando ( c h a r ) na frente do i , esse comando transforma uma variável qualquer numa variável do tipo caractere. No código ascii, a letra ‘A’ está associada ao número 65 , e por isso esse trecho de programa escreve a letra ‘A’ na tela.

Passo 2

Vamos aplicar essa lógica para todos os 256 caracteres. Para isso vamos usar um laço de repetição, nesse caso eu vou usar um laço do tipo for.

# i n c l u d e   < s t d i o . h >

i n t   m a i n ( )

{

        f o r   ( i n t   i = 0 ;   i < 255 ;   i + + )

        {

                p r i n t f   ( " \ n % d   - - - - >   % 4 c \ n " ,   i   , ( c h a r )   i ) ;

        }

        r e t u r n   0 ;

}

Repara que a gente escreve a variável i duas vezes a cada iteração, uma como o número inteiro, e a outra como um caractere.

Passo 3

O programa ainda não acabou, até agora estamos escrevendo todos os caracteres de uma única vez na tela, mas o problema pede que a saída seja de 20 em 20 linhas, a cada vez que o usuário pressionar ‘c’ ou ‘C’ e depois a tecla enter.

Para fazer isso, precisamos ler uma entrada do usuário, e aí a gente vai verificar se essa entrada é igual a ‘c’ ou a ‘C’. Além disso, a gente também vai precisar de uma variável que vai contar de 1 até 20 , só assim a gente consegue saber em que linha estamos.

# i n c l u d e   < s t d i o . h >

i n t   c o n t a   =   1 ;

c h a r   e n t r a d a ;

i n t   m a i n ( )

{

        f o r   ( i n t   i = 0 ;   i < 255 ;   i + + )

        {                    

                        p r i n t f   ( " \ n % 4 d   - - - - >   % 4 c \ n " ,   i   , ( c h a r )   i ) ;

                        c o n t a + + ;

                w h i l e   ( c o n t a > 20 )

                {

                        s c a n f ( " % c " ,   & e n t r a d a ) ;

                        p r i n t f ( " P a r a   c o n t i n u a r   d i g i t e   ' c '   o u   ' C '   e   p r e s s i o n e   < E N T E R > : \ n " ) ;

                        i f   ( e n t r a d a   = =   ' c '   | |   e n t r a d a   = =   ' C ' )

                        {      

                                c o n t a   =   1 ;

                        }

                }

        }

        r e t u r n   0 ;

}

Resposta

# i n c l u d e   < s t d i o . h >

i n t   c o n t a   =   1 ;

c h a r   e n t r a d a ;

i n t   m a i n ( )

{

        f o r   ( i n t   i = 0 ;   i < 255 ;   i + + )

        {                    

                        p r i n t f   ( " \ n % 4 d   - - - - >   % 4 c \ n " ,   i   , ( c h a r )   i ) ;

                        c o n t a + + ;

                w h i l e   ( c o n t a > 20 )

                {

                        s c a n f ( " % c " ,   & e n t r a d a ) ;

                        p r i n t f ( " P a r a   c o n t i n u a r   d i g i t e   ' c '   o u   ' C '   e   p r e s s i o n e   < E N T E R > : \ n " ) ;

                        i f   ( e n t r a d a   = =   ' c '   | |   e n t r a d a   = =   ' C ' )

                        {      

                                c o n t a   =   1 ;

                        }

                }

        }

        r e t u r n   0 ;

}