Mostrando postagens com marcador ASCII. Mostrar todas as postagens
Mostrando postagens com marcador ASCII. Mostrar todas as postagens

Exibindo caracteres especiais no printf.

Ola pessoal, imagino que todo mundo que programa pela primeira vez no DEV C++, acha estranho quando tenta exibir uma palavra com acento e aparece caracteres bizarros na tela. Quem esta começando agora ou nunca percebeu isso, a figura 1 mostrar um exemplo de código onde temos algumas palavras acentuadas.
Figura 1. Código em C onde tentaremos exibir palavras com acento.
Quando compilamos e executamos o código acima, notamos que todas as letras que possuem acentos apresentam um problema. A letra acentuada é trocada por um caractere que não conseguimos ler conforme apresentado na Figura 2.
Esse problema ocorre porque o compilador não reconhece caracteres especiais (caracteres como símbolos e palavras com acentos) e no local onde esses caracteres deveriam ser exibidos o compilador substitui por outros símbolos que dificultam a leitura do texto. As setas mostradas na figura 2 indicam onde temos esses caracteres.
Figura 2. Exibição do código apresentado na figura 1 onde as letras com acento apresentam problemas de exibição

Para solucionar esse problema e apresentar o texto com a devida acentuação, temos duas opções: Ou iremos usar os recursos da tabela ASCII que mostrarei depois ou adicionar a biblioteca <locale.h> ao nosso código.

A biblioteca Locale permitirá que nosso compilador suporte configurações específicas regionais, como formatos de data específica e seus caracteres especiais (como acentos e símbolos de moeda corrente) usados num determinado país. Para especificar o país de qual gostaríamos usar os caracteres especiais, devemos usar a instrução setlocale.
A figura 3 mostra um código onde definiremos o padrão português para que os acentos sejam devidamente mostrados na tela. A saída de dados referente a compilação do código mostrado na figura 3 é apresentado na figura 4.
Figura 3. Código usando a biblioteca Locale e as definições em português.

Figura 4.  Exibição do texto com acentos graça ao código apresentado na figura 3.

A figura 5 mostra que qualquer carácter do teclado pode ser exibido sem erro com o uso da biblioteca locale.h.....

Figura 5. Todos os caracteres do teclado podem ser exibidos corretamente com o uso da biblioteca locale.


Caracteres especiais usando a tabela ASCII

Outra maneira de exibir caracteres especiais através do uso do printf é usando o código ASCII (American Standard Code for Information Interchange). O código ASCII (que em português significa Código Padrão Americano para o Intercâmbio de Informação) é um padrão de conversão onde cada caracter é representado por uma sequencia de 8 bits. Quando convertemos esse byte em decimal, temos um numero que podemos usar em nosso código.
Por exemplo, o código ASCII 130 equivale a letra "é", logo para exibir o "é" devemos criar uma variável char e atribuir a ela o seu equivalente decimal da tabela ASCII e exibi-la como char.

main()
{
     char teste;
     teste =130;   // equivalente do é em ASCII
     printf(" vamos exibir um caracter com acento usando ASCII  %c", teste);
     system("pause");
}

A figura 6 mostra como a mensagem será exibida e a seta vermelha indaca o carácter especial que será exibido.
Figura 6. Exibição de carácter especial usando código ASCII.

Olhando a codificação acima a pergunta que sempre me fazem é: Porque usar a tabela ASCII se posso usar a biblioteca locale?????
A resposta é simples, nem todos os caracteres da tabela ASCII aparecem no teclado. Para ter uma ideia de como podemos brincar com a tabela ASCII, a figura 7 mostra alguns exemplo que só podem ser exibidos via código ASCII.
Figura 7. Caracteres especiais que só podem ser exibidos usando a tabela ASCII.
Quer conhecer todos os códigos da tabela ASCII?  Clique aqui e acesse essa informação. Quem quiser o código em C da exibição acima, me envie uma mensagem via blog ou facebook....

Ainda ta com duvida, curta nossa pagina no facebook e poste sua duvida lá....