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!