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.

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.

19 comentários:

Anônimo disse...

Jaide Ambrosio

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

Matheus Henrique Oliveira disse...

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

Gostei muito do curso, otima iniciativa.

Matheus Henrique Oliveira disse...

Ótimo artigo, gostei muito!!

Bem interessante isso.

Anônimo disse...

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.

Anônimo disse...

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

gilsilva disse...

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?

Juciel Moura disse...

ótimo curso em c, bela iniciativa...

Ghost Blogger disse...

#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);}

jean silva disse...

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

Anônimo disse...

eu achei interessante porque consegui colocar caracteres acentuados

dicas de tudo e mais um pouco... disse...

//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);
}

Anônimo disse...

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);
}

Anônimo disse...

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

Pikachu disse...

Obrigado! Estou aprendendo muito com vcs!

Izaias de Oliveira Elias disse...

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!!!

Anônimo disse...

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

Unknown disse...

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?

marcela Sousa disse...

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);

}

Helbert Sparrow disse...

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.

Gostou desse tutorial de C?
Sabia que o acervo do portal C Progressivo é o mesmo, ou maior que, de um livro ou curso presencial?
E o melhor: totalmente gratuito.

Mas para nosso projeto se manter é preciso divulgação.
Para isso, basta curtir nossa página no Facebook e/ou clicar no botão +1 do Google.
Contamos e precisamos de seu apoio.