Alura > Cursos de Programação > Cursos de C e C++ > Conteúdos de C e C++ > Primeiras aulas do curso C: avançando na linguagem

C: avançando na linguagem

O Jogo de Forca - Introdução

Vamos começar a segunda parte do nosso curso de C?!

Dessa vez vamos desenvolver um Jogo de Forca, ainda mais desafiador que o Jogo de Adivinhação em que trabalhamos na primeira parte do curso.

Para isso, aprenderemos a manipular arrays, criar funções, além de escrever e ler arquivos, aprofundando os conhecimentos sobre entrada e saída.

E, claro, aprenderemos a deixar o jogo bonito no final!

Esse é o desafio! Vamos começar?

Manipulando Arrays - Conhecendo os arrays

Para se começar um jogo de forca, de maneira análoga ao nosso jogo de adivinhação, é guardar a palavra secreta. Até agora, já conhecemos diversos tipos de variáveis, como int, double, float, long, mas ainda não vimos o tipo usado para se guardar um texto.

Em C, para guardarmos uma única letra, usamos o tipo char. E o declaramos da mesma forma que os outros. Mas, para se passar a letra a ser armazenada, usamos aspas simples. Para imprimir, usamos a máscara "c" no printf. Veja o código abaixo:

#include <stdio.h>

int main() {
    char letra1 = 'M';
    char letra2 = 'F';
    char letra3 = 'A';

    printf("%c %c %c", letra1, letra2, letra3);
}

Ele nos imprime as letras "M", "F" e "A". Mas e para guardar uma palavra? Será que precisamos armazenar letra a letra? A resposta é sim. Precisamos guardar uma a uma, mas para isso não teremos uma variável diferente para cada letra. Aliás, se tivéssemos, ficaríamos malucos. Imagina para guardar um texto inteiro? Quantas variáveis teríamos?

E o pior, não conseguiríamos fazer códigos dinâmicos para imprimir palavras de tamanhos diferentes. Não conseguimos escrever um for, por exemplo, para imprimir as várias letras:

// imagine uma palavra com 10 letras
for(int i = 1; i <= 10; i++) {
    // não temos uma maneira de "gerar dinamicamente"
    // o nome da variável a ser impressa.
    // Ou seja, não conseguimos imprimir "letra1", 
    // depois "letra2", e assim por diante.
    printf("%c", letra(i));
}

O que usaremos para isso é o que chamamos de array. Arrays são uma maneira de guardarmos "vários" de um só tipo. Esses elementos ficam armazenadas na memória, um ao lado do outro. Por exemplo, um array de inteiros guarda um monte de números inteiros. Um array de char guarda um monte de caracteres. E assim por diante. E a vantagem do array é que, no momento da declaração, dizemos o tamanho dele. E aí acessamos cada um desses elementos por meio de um índice.

Veja, por exemplo, uma declaração de um array de inteiros, com 5 posições. Veja que a declaração é idêntica, com exceção do uso dos colchetes:

int notas[5];

Agora, para usar esse array, guardando e lendo inteiros dele, basta usarmos os colchetes para definirmos a posição que queremos acessar. Afinal, temos 5. O único detalhe importante é que, se nosso array tem 5 posições, elas vão de 0 a 4. A primeira posição de um array é o 0 (e não o 1, como muitos confundem):

// guardando na primeira posição do array
notas[0] = 10;

// guardando na segunda posição
notas[1] = 5;

// imprimindo a primeira posicao
printf("%d", notas[0]);

Manipulando Arrays - Criando e imprimindo um array de caracteres

Para então guardarmos nossa palavra secreta, vamos declarar um array de char. Vamos definir seu tamanho como 20:

char palavrasecreta[20];

Podemos guardar nossa palavra dentro dele, da mesma forma que estávamos fazendo antes. A diferença é que o número que passamos entre colchetes, pode vir de uma variável:

char palavrasecreta[20];

palavrasecreta[0] = 'M';
palavrasecreta[1] = 'E';
palavrasecreta[2] = 'L';

int numero = 3;
palavrasecreta[numero] = 'A';

palavrasecreta[4] = 'N';
palavrasecreta[5] = 'C';
palavrasecreta[6] = 'I';
palavrasecreta[7] = 'A';

Um trabalhão. Para imprimir a palavra, fica um pouco mais fácil. Afinal, como podemos usar variáveis ali no índice, conseguimos fazer um loop com o tamanho da palavra:

for(int i = 0; i < 8; i++) {
    printf("%c", palavrasecreta[i]);
}

Entretanto, um array de char é um array especial. Como nós o usamos para guardar textos, temos funções especializadas para facilitar nossa vida na hora de colocar dados dentro dele. Essas funções também vão nos ajudar a escrever loops mais flexíveis (o 8 ali está fixo, mas queremos que ele se adapte ao tamanho da palavra).

A função sprintf() é muito parecida com a printf(). Enquanto o printf imprime na tela, a sprintf imprime em um array de chars (o s** é justamente de **string). Então, se quisermos guardar a palavra secreta no array, fazemos:

sprintf(palavrasecreta, "MELANCIA");

Para imprimirmos na tela, usamos o printf com a máscara "s". Ela faz com que todo o array seja impresso. Veja:

printf("%s", palavrasecreta);

Mas, veja que interessante. Nosso array tem 20 posições e a palavra "melancia" tem apenas 8 caracteres. Como que ele soube que deveria parar no último "a"? Por que ele não imprimiu 20 caracteres? Strings em C tem um pequeno detalhe: sempre que guardamos uma palavra lá, como melancia, que ocupa 8 posições, guardamos um caractere especial na 9a posição. Esse caractere nos diz que a string acaba ali, e que o resto é "lixo". Esse caractere é representado pelo símbolo \0 (barra zero). Apesar de serem dois caracteres, lembre-se que o barra é especial. Esse \0 é armazenado em uma única posíção.

Ou seja, quando fizemos o sprintf(), ele escreveu na verdade o texto "MELANCIA\0". A função printf(), sabendo disso, foi lendo o array de chars até encontrar o \0. Encontrou, parou.

Se estivéssemos declarando as letras dessa palavra uma a uma, igual fizemos acima, bastaria adicionar o \0 ao final, que o printf("%s") funcionaria normalmente:

char palavrasecreta[20];

palavrasecreta[0] = 'M';
palavrasecreta[1] = 'E';
palavrasecreta[2] = 'L';
palavrasecreta[3] = 'A';
palavrasecreta[4] = 'N';
palavrasecreta[5] = 'C';
palavrasecreta[6] = 'I';
palavrasecreta[7] = 'A';

// colocando o \0 para indicar que a string acabou
palavrasecreta[8] = '\0';

Sobre o curso C: avançando na linguagem

O curso C: avançando na linguagem possui 185 minutos de vídeos, em um total de 66 atividades. Gostou? Conheça nossos outros cursos de C e C++ em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda C e C++ acessando integralmente esse e outros cursos, comece hoje!

Plus

De
R$ 1.800
por
12X
R$109
à vista R$1.308
  • Acesso a TODOS os cursos por 1 ano

    Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Certificado

    A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.

  • Mentorias com especialistas

    No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.

  • Comunidade exclusiva

    Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.

  • Acesso ao conteúdo das Imersões

    Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.

  • App Android e iOS para estudar onde quiser

    Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.

Matricule-se

Pro

De
R$ 2.400
por
12X
R$149
à vista R$1.788
  • Acesso a TODOS os cursos por 1 ano

    Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Certificado

    A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.

  • Mentorias com especialistas

    No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.

  • Comunidade exclusiva

    Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.

  • Acesso ao conteúdo das Imersões

    Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.

  • App Android e iOS para estudar onde quiser

    Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.

  • Luri, a inteligência artificial da Alura

    Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.

  • Alura Língua - Inglês e Espanhol

    Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.

Matricule-se

Ultra

12X
R$209
à vista R$2.508
  • Acesso a TODOS os cursos por 1 ano

    Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Certificado

    A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.

  • Mentorias com especialistas

    No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.

  • Comunidade exclusiva

    Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.

  • Acesso ao conteúdo das Imersões

    Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.

  • App Android e iOS para estudar onde quiser

    Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.

  • Luri, com mensagens ILIMITADAS

    Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.

  • Luri Vision, a IA que enxerga suas dúvidas

    Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.

  • Alura Língua - Inglês e Espanhol

    Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.

  • 6 Ebooks da Casa do Código

    Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.

Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas