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.
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.
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.
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. |
Ainda ta com duvida, curta nossa pagina no facebook e poste sua duvida lá....
Muito obrigada.
ResponderExcluirAjudou muito!
Sóoooo o tode me ajudou muito....
ResponderExcluirObrigado Bruno, eu passei o ano passado inteiro escrevendo "eh" ao invés de "é". :I
ResponderExcluirAinda bem que encontrei seu blog.
Mítico, me ajudou muito também.
ResponderExcluirMuito Obrigado!
como vc fez o coração ?
ResponderExcluirBom artigo, mas existem soluções mais eficientes. Fiz um post aqui.
ResponderExcluirhttp://linguagemcfacil.mozello.com/conteudos/params/post/2016097/exibicao-definitiva-dos-caracteres-especiais-em-c
Este comentário foi removido pelo autor.
ResponderExcluir