aula 30

Acentuação e a tabela ascii

Você já tentou imprimir o valor de uma variável do tipo char usando o %d no lugar de usar %c? Se você pensou que isso vai gerar algum erro, não, não vai.

A verdade é que toda variável do tipo char também armazena um número. Como o tipo char ocupa apenas um byte de memória (8 bits), é possível armazenar valores no intervalo de -128 até 127.

Logo, qualquer variável do tipo char, ao ser impressa na tela, se for utilizado o %c, será impresso um caractere, contudo, se for utilizado o %d, será impresso um número inteiro.

Mas, por que isso acontece?

Existe uma tabela chamada TABELA ASCII que é utilizada para fazer o mapeamento entre números e caracteres. Para cada número no intervalo entre 0 e 127 existe um caractere associado. Por exemplo:
9 é o caractere de tabulação \t.
10 é o caractere de nova linha \n (enter).
65 é a letra A maiúscula.
66 é a letra B maiúscula.
90 é a letra Z maiúscula.
O alfabeto minúsculo está entre 97 (a) e 122 (z).

Esta tabela possui exatamente 127 caracteres que corresponde ao intervalo de números positivos apresentado anteriormente para 1 byte de memória. É daí que vem o problema de acentuação. Não há nenhum tipo de acentuação nos caracteres desta tabela.

Como resolver então o problema da acentuação na linguagem C?

Vamos por partes. Como uma variável do tipo char guarda um número inteiro, significa que podemos utilizar o operador unsigned. Assim temos:
char letra1; // intervalo de -128 a 127
unsigned char letra2; // intervalo de 0 a 255

Existe uma versão estendida da TABELA ASCII com caracteres representados pelos números de 0 a 255. Esta tabela possui a maior parte das acentuações utilizadas por diversas idiomas mundo afora, incluindo o português brasileiro.

É esta tabela que precisamos utilizar, mas, como fazer isso?

Simples. Primeiro precisamos incluir esta linha de código abaixo dos includes que já temos:

include <locale.h>

Aqui nós estamos fazendo a inclusão de um arquivo de interface. Não se preocupe tanto em entender essa linha agora, mais a frente isso ficará mais claro.

Dentro da função main precisamos escrever a seguinte função:
setlocale();

Esta função pode ser utilizada de três formas:

1ª = setlocale(LC_ALL, NULL);// padrão da linguagem C
2ª = setlocale(LC_ALL, “”);// padrão do sistema operacional
3ª = setlocale(LC_ALL, “Portuguese”);// português brasileiro

A primeira forma nós já conhecemos. Por padrão a linguagem C utiliza a TABELA ASCII resumida, com caracteres de 0 a 127, sem acentuação.

A segunda forma utiliza a codificação adotada pelo sistema operacional da máquina do usuário. Assim, se o sistema operacional estiver em português, perfeito, irá funcionar. Contudo, muitos usuários utilizam o sistema operacional em inglês, neste caso o problema com acentuação permanecerá.

A terceira forma é a mais recomendada. Ela garante a utilização da TABELA ASCCII ESTENDIDA com acentuação independente do sistema operacional utilizado.


Se você está aprendendo com este curso,:

  • Se inscreva no canal…
  • Pressione o sininho para ser notificado…
  • Deixe seu like (assim saberei que gostou, além de me incentivar a continuar)
  • Apresente o canal à seus amigos!

SÃO VOCÊS QUE FAZEM O CANAL CRESCER!

Deixe um comentário

13 − 6 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.