Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

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:

Anônimo disse...

Jaide Ambrosio

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

Unknown disse...

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

Gostei muito do curso, otima iniciativa.

Unknown 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...

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

Anônimo 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

Valterli disse...

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

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.

Unknown disse...

Obrigado! Estou aprendendo muito com vcs!

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

Anônimo 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?

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

}

Unknown 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.

dka disse...

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

Mario Cezzare (mcezzare) disse...

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.

Anônimo disse...

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

guerra disse...

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

Unknown disse...

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?