O tipo char - escrevendo na linguagem C

Agora que você já sabe como lidar com inteiros e decimais na linguagem C, está na hora de estudarmos como escrever caracteres.

Curso C Progressivo com certificado
Obter certificado do curso C Progressivo

Como declarar o tipo char em C

Para armazenar caracteres vamos usar um tipo especial de dados, o char (de character - caractere, em inglês).

O tipo char serve para armazenar UM, e somente UM, caractere.
Para declarar, usamos a seguinte sintaxe;
char nomeDaVariavel;

Ao fazermos isso, estamos alocando 1 byte de memória para guardar nosso caractere.
Se você quiser armazenar mais caracteres, temos que usar as Strings, que são um conjunto de caracteres, usados para escrever textos maiores.

Nós estudaremos as Strings mais à frente, em nossa apostila de C.


Como inicializar variáveis char em C

Para guardar uma letra no seu char, temos que fazer uma operação especial: sempre colocar o caractere entre aspas simples.

Por exemplo, para guardar a letra C, escrevemos:

char letra = 'C';

A sintaxe linguagem de programação é case sensitive, ou seja, minúsculo é diferente de maiúsculo.
Por exemplo:

char letraMinuscula = 'c';
char letraMaiuscula = 'C';

Esses dois caracteres, embora representem a mesma letra, são totalmente diferentes, pois uma é maiúscula e a outra é minúscula.


Como imprimir caracteres e textos na tela

Vamos agora aprender como mostrar na tela letras e caracteres, através da função printf.

Assim como usamos %d para mostrar inteiros, %f para float e double, vamos usar um símbolo especial para caracteres: %c

Por exemplo, um programa que exiba o texto "C Progressivo" na tela tem o seguinte código:

#include <stdio.h>

int main()
{
    char letra0='C', letra1=' ', letra2='P', letra3='r', letra4='o', letra5='g',
    letra6='r', letra7='e', letra8='s', letra9='i', letra10='v',letra11='o', letra12='\n';
    printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c",letra0,letra1,letra2,letra3,letra4,
    letra5,letra6,letra7,letra8,letra8,letra9,letra10,letra11,letra12);
}


Note 3 coisas interessante que mostramos:
1 - letra1=' '
Sim, espaço também é caractere!

2 - Repetimos letra8 duas vezes no printf, por quê?
Ora, a letra 's' se repete duas vezes na frase: "C Progressivo".
Em vez de gastar memória à toa para representar o mesmo caractere, o certo é repetir duas vezes o char.

3 - letra12='\n'
Sim, a quebra de linha, ou ENTER, é um caractere também!

Notou também a trabalheira e o tanto de código, apenas pra escrever isso? Inviável!
Em breve, em nosso curso C Progressivo, iremos aprender sobre strings, ou vetores de caracteres, que é uma maneira bem mais simples de se escrever e manipular textos em C.



A tabela ASCII em C

Digite e rode o seguinte programa em C:

#include <stdio.h>

int main()
{
    char ascii = 67;
    printf("%c%",ascii);
}

Estranho o resultado, não? Inicializamos um caractere sem aspas simples e digitamos dois números?
Se notar bem, não inicializamos o char com um caractere, pois não usamos aspas simples, iniciamos como se char fosse um inteiro.
Por que isso?

Ver char como inteiros não seria errado.
O que acontece é que cada caractere em programação recebe um número, como se fosse uma identificação.
A letra 'C' por exemplo, tem o número 67 como sua identificação.

Ou seja, para o computador:
char ascii = 67;
ou char ascii = 0x43;
ou char ascii = 'C';

É a mesma coisa. No primeiro caso, representamos o caractere como um número decimal.
No segundo, o caractere é representado pro um número no formato hexadecimal.
Altere o número para outro e veja os resultados.
Você verá que cada caractere, incluindo o ENTER, TAB ou aviso sonoro é identificado com um número.

A tabela ASCII nada mais é que uma lista completa dos números que identificam os caracteres, veja só:


Podemos fazer o contrário também. Dentro do printc colocar os %c, e números após a vírgula.
Por exemplo, a letra 'o' pode ser representada pelo número 111 e a letra 'i' pode ser representada po 105.

Então podemos escrever 'oi' da seguinte maneira:

#include <stdio.h>

int main()
{
    printf("%c%c ",111,105);
}


Sim: 111,105 quer dizer 'oi'. Legal, não?
Agora você já pode escrever cartas e códigos secreto, e só quem sabe a poderosa linguagem C que pode ler.

Por exemplo, descubra o que está dito no programa abaixo:

#include <stdio.h>

int main()
{
    printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
           80,97,114,97,98,101,110,115,44,32,118,111,99,101,32,100,101,115,99,111,98,114,105,117,32,111,32,115,101,103,114,101,100,111);

}


Exercício:
Escreva seu nome usando apenas a função printf, %c e números. Use a tabela ASCII.

25 comentários:

  1. Jaide Ambrosio

    Sensacional. As possibilidades são inúmeras. :)

    ResponderExcluir
  2. Cada lição vai ficando cada vez mais interessante xD

    Gostei muito do curso, otima iniciativa.

    ResponderExcluir
  3. Ótimo artigo, gostei muito!!

    Bem interessante isso.

    ResponderExcluir
  4. até agora eu não consegui escrever um caractere com acento dentro do printf, por exemplo "é" eu não consegui exibir.

    Aproveitando como se utiliza um loop e um delay? eu uso no arduino mas acho que tenho que utilizar um #include aqui e não sei como.

    De resto parabens pelo curso. Obrigado.

    ResponderExcluir
  5. Do nada meu antivpirus começa a bloquear o acesso a pasta.Alguém sabe como resolver?

    ResponderExcluir
  6. E as strings podem representar um caractere ou uma coleção deles qual a utilidade do tipo char?

    É só para economizar memoria ou este tipo tem alguma função mais interesante que eu não consegui notar?

    ResponderExcluir
  7. ótimo curso em c, bela iniciativa...

    ResponderExcluir
  8. #include

    int main()
    {
    printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
    80,97,114,97,98,101,110,115,32,112,101,108,97,32,105,110,105,99,105,97,116,105,118,97,44,32,
    79,98,114,105,103,97,100,111,32,80,101,108,111,32,99,117,114,115,111,46);}

    ResponderExcluir
  9. comigo essa etapa do curso nao funcionou! Dá sempre erro. alguém pode me responder por que?

    ResponderExcluir
  10. eu achei interessante porque consegui colocar caracteres acentuados

    ResponderExcluir
  11. ola
    poderia me informa qual o meu erro por aparece no final um L como se estivesse
    elevando o I no L

    ResponderExcluir
  12. //c.progressivo.net

    #include

    int main()
    {
    //posso usar tanto Html(80 = letra P) como Hexadecimais(0x4f = letra O)
    printf("%c%c%c%c%c%c%c%c%c", 80, 97, 98, 108, 111, 0x4F, 0x61, 0x6b, 0x73);
    }

    ResponderExcluir
  13. Gostei do curso, excelente bem explicativo e com bons exercícios, estou me saindo bem.

    #include

    int main()
    {
    printf("%c%c%c%",01,27,34);
    printf("%c%c%c%c%c%c",100,101,98,111,114,97);
    }

    ResponderExcluir
  14. Ah! usa localidade com a biblioteca locale.h, bem mais fácil se for somente o caso de exibir texto acentuado.

    ResponderExcluir
  15. Obrigado! Estou aprendendo muito com vcs!

    ResponderExcluir
  16. adorei a aula fiz tudo direitinho, deu certo.
    mas como eu não sou uma pessoa conformada, tenho uma duvida senhor(s),
    como seria um programa assim:

    #include
    #include

    int main ()
    {
    char codigo;
    codigo 'a' =alfa, codigo 'b'=bravo;
    system ("pause");
    return 0;
    }
    para que o cidadão digitasse a printa alfa e se digitar alfa printa a como ficaria. desde ja obrigado mente livre!!!

    ResponderExcluir
  17. Olá, o assunto sobre os acentos como:ç, é ê etc., já está resolvido!

    ResponderExcluir
  18. Olá meu amigo! primeiramente gostaria de Agradecer as aulas, e sem segundo gostaria de tirar uma dúvida, tentei criar um programa que transforma o nome que a pessoa digitar e números na ordem do alfabeto. Exemplo a = 1, b = 2, c = 3, e assim em diante. Tentei com o char e com a função scanf, mais não consegui. Poderia me ajudar?

    ResponderExcluir
  19. Muito boom (y)

    #include

    int main()
    {
    char letra1 = 'M', letra2 = 'a', letra3 = 82, letra4 = 67, letra5 = 'e', letra6 = 'l', letra7 = 65;
    printf ("meu nome eh: %c%c%c%c%c%c%c", letra1, letra2, letra3, letra4, letra5, letra6,letra7);

    }

    ResponderExcluir
  20. Para ler e imprimir na tela uma palavra inteira sem precisa usar tantos "%c", basta fazer como fiz aqui:

    #include
    main (){
    char vendedor[9];
    scanf("%s",&vendedor);
    printf("%s", vendedor);

    }


    o nome que você digitar vai aparecer na tela normalmente.

    ResponderExcluir
  21. "Parabens, voce descobriu o segredo" kkkkkkk tava facil de mais

    ResponderExcluir
  22. em 1º lugar Grato pelas explicações amigo, estou retomando meus estudos com C, pois estou precisando mexer em um projeto open source e estou meio enferrujado nessa linguagem.
    Só querendo compartilhar um exemplo que faço com qualquer linguagem quando estou estudando e não vi um comentário disso ainda nesse post é que o encoding do terminal pode gerar uma dúvida p/ quem está começando a programar.

    int main()
    {
    for (int i = 0; i <= 255; i++)
    {
    printf("Valor: %d\t Char:%c\n", i, i);
    }
    }

    Como estou em um mac e usando um terminal com encoding UTF-8 , os valores acima de 127 aparecem como "?". Para poder ver os próximos até 255 assim como os caracteres acentuados, o encoding deve ser trocado para Western ISO Latin1, o que deve acontecer para quem já está com o SO em português que não é meu caso.

    Parabéns pela iniciativa.

    ResponderExcluir
  23. A descrição da tabela ASCII foi incrível!

    ResponderExcluir
  24. int main(){


    int lan;
    lan=0;

    for (lan=10; lan<=256; lan=lan+4){

    printf ("As minhas Redes Sao %d\n\n ",lan);

    }

    printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n\n",77,97,114,105,97,32,65,109,111,114,32,68,111,32,78,103,111,108,97);

    printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
    80,97,114,97,98,101,110,115,32,76,85,67,65,83,44,32,118,111,99,101,32,100,101,115,99,111,98,114,105,117,32,111,32,115,101,103,114,101,100,111);

    return 0;
    }

    ResponderExcluir
  25. Baseado na explicação da página:
    #include

    int main()
    {
    char ascii = 67;
    printf("%c%",ascii);
    }

    Eu fiz o seguinte código:

    //Retorna a mensagem: "[Error] expected identifier or '('before numeric constant"

    #include
    #include
    #include
    #include
    #include
    #include

    //Exercício: Escreva seu nome usando apenas a função printf, %c e números. Use a tabela ASCII.

    main (void)
    {
    setlocale(LC_ALL,"portuguese");
    system ("color 3E");

    char ascii = 74, 101, 97, 110, 32, 67, 97, 114, 108, 111, 115;
    printf("%c% %c% %c% %c% %c% %c% %c% %c% %c% %c% %c%", ascii);
    return 0;

    }

    BASEADO NESSE ACERTEI:
    #include

    int main()
    {
    printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
    80,97,114,97,98,101,110,115,44,32,118,111,99,101,32,100,101,115,99,111,98,114,105,117,32,111,32,115,101,103,114,101,100,111);

    }

    Minha indagação é quanto ao que errei. Porque está errado?

    ResponderExcluir

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.