Ir para conteúdo
Fórum Script Brasil
  • 0

Forca em C


Lucas Conrado

Pergunta

Bom dia , galera. 

Estou precisando muito da ajuda de vocês.Estou no primeiro período de engenharia e estou com dificuldade na matéria de programação de computadores. Meu professor passou um trabalho pedindo para que a gente fizesse uma forca em C. Encontrei um monte de forcas em C na internet. Contudo, como ainda estamos no primeiro período, muitos códigos eu não sei o que significa ainda. Até agora só conhecemos os comandos mais básicos.

Sendo assim, utilizando os códigos mais básicos, vocês conseguiriam me ajudar ?

Obs:. O jogo não precisa ser muito bem elaborado não. Não precisa ter desenho. Basicamente, é pedir para o usuário entrar com uma letra e ver se a letra existe no nome. Se existir, imprimir na tela que a letra existe e, caso não exista, imprimir na tela que a palavra não contem a letra. O usuário pode errar a letra no máximo 5 vezes . Além disso, no trabalho, eu escolho a palavra que devera ser escolhida. 

Eu comecei ele desse jeito, mas já tem um erro nele que eu não estou conseguindo identificar.

#include <stdio.h>

int main()

{
 
char palavras [5][20]={"computador","livro","teclado","agua","lixeira"};
char letra;
int palavraerrada=0,palavracerta=0,i; 

do
{
printf("Entre com uma letra: ");
scanf("%c", &letra);

  for(i=0;i<=19;i++)
    {
       if(palavras[0]==letra)
         {
            printf("A letra %c ocupa a posicao %d da palavra.",letra,i+1);
            palavracerta=palavracerta+1;
            break;            
         }
         
       else
         {
            printf("A palavra não contem a letra %c.",letra);
            palavraerrada=palavraerrada+1;
            break;      
         }  
                            
    }    
}       
while(palavraerrada<=5);                           
          
  
system("pause");    
return 0;
}         

 

 

 

Editado por Lucas Conrado
Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Olá amigo. Estive dando uma olhada no exercício que você precisa fazer e tbém no seu código.

Eu poderia passar um código pronto p vc, mas daí você não iria aprender nada. Então, creio que o melhor a fazer seria dar algumas dicas.

O primeiro problema no seu código é q você está verificando se a letra existe ou não da maneira errada. Não sei dizer se você já viu alguma coisa sobre ponteiro ou Strings. Vou passar as dicas considerando q você já viu um pouco sobre isso q falei.

A primeira coisa a fazer seria criar uma maneira de poder selecionar manualmente como escolher uma palavra. Para isso daria para fazer algo assim:

char *palavraSelecionada;

palavraSelecionada = palavras[0] // nesse exemplo, estou escolhendo a primeira palavra, q seria computador e passando o valor dela para minha variável

outro exemplo:

palavraSelecionada = palavras[2] // seria para escolher a palavra teclado  etc...

Depois de feito isso, o ideal seria usar o comando strlen(palavraSelecionada) na condição do for, assim você teria o tamanho certo da palavra. Mas, caso ainda não chegou nessa parte, coloque tipo assim no for (i = 0; i < 10; i++) // Esse 10 seria o tamanho máximo que as palavras poderiam ter. Se colocar uma palavra maior do q 10 posicões, teria que colocar 15. Esse valor seria apenas uma quantidade onde todas as palavras que você usar couberem.

Se entendeu até aqui ok. Vamos dar sequencia...

Outra coisa é que você está verificando dentro do for se está certa com um if e depois com um else, daí não funciona, teria que criar uma variável do tipo int para dá verificar se está errada. Ex: int correta; , Depois, no início do while coloque correto = 0;

Feito isso, se a pessoa acertou uma letra, também mude o valor dessa variável, ex: correto = 1;

Depois que verificar com o if se a letra está na palavra, faça um outro if só que daí fora do for. Tem que ser assim:

if (correto == 0)

{

      // letraErrada

}

para verificar se a letra digitada esta ou não na palavra, procure assim:

for (i = 0; i < 15; i++)

     if (palavraSelecionada == letra)

    {

     // letra correta

     correto = 1;

   }

} // aqui termina o for

if (correto == 0)

{

      // letraErrada

}

 

Experimente fazer o exercício agora usando essas dicas e daí diz até aonde você chegou, ok?

Outra coisa. Você está apenas verificando na condição do DO/WHILE se a letra está errada, o ideal seria mudar para while (palavraerrada<=5 && palavracerta <= 5); // Coloquei o <= 5 na palavracerta pois não sei como você quer verificar se a pessoa acertou ou não a palavra toda

Olá amigo. Estive dando uma olhada no exercício que você precisa fazer e tbém no seu código.

Eu poderia passar um código pronto p vc, mas daí você não iria aprender nada. Então, creio que o melhor a fazer seria dar algumas dicas.

O primeiro problema no seu código é q você está verificando se a letra existe ou não da maneira errada. Não sei dizer se você já viu alguma coisa sobre ponteiro ou Strings. Vou passar as dicas considerando q você já viu um pouco sobre isso q falei.

A primeira coisa a fazer seria criar uma maneira de poder selecionar manualmente como escolher uma palavra. Para isso daria para fazer algo assim:

char *palavraSelecionada;

palavraSelecionada = palavras[0] // nesse exemplo, estou escolhendo a primeira palavra, q seria computador e passando o valor dela para minha variável

outro exemplo:

palavraSelecionada = palavras[2] // seria para escolher a palavra teclado  etc...

Depois de feito isso, o ideal seria usar o comando strlen(palavraSelecionada) na condição do for, assim você teria o tamanho certo da palavra. Mas, caso ainda não chegou nessa parte, coloque tipo assim no for (i = 0; i < 10; i++) // Esse 10 seria o tamanho máximo que as palavras poderiam ter. Se colocar uma palavra maior do q 10 posicões, teria que colocar 15. Esse valor seria apenas uma quantidade onde todas as palavras que você usar couberem.

Se entendeu até aqui ok. Vamos dar sequencia...

Outra coisa é que você está verificando dentro do for se está certa com um if e depois com um else, daí não funciona, teria que criar uma variável do tipo int para dá verificar se está errada. Ex: int correta; , Depois, no início do while coloque correto = 0;

Feito isso, se a pessoa acertou uma letra, também mude o valor dessa variável, ex: correto = 1;

Depois que verificar com o if se a letra está na palavra, faça um outro if só que daí fora do for. Tem que ser assim:

if (correto == 0)

{

      // letraErrada

}

para verificar se a letra digitada esta ou não na palavra, procure assim:

for (i = 0; i < 15; i++)

     if (palavraSelecionada == letra)

    {

     // letra correta

     correto = 1;

   }

} // aqui termina o for

if (correto == 0)

{

      // letraErrada

}

 

Experimente fazer o exercício agora usando essas dicas e daí diz até aonde você chegou, ok?

Outra coisa. Você está apenas verificando na condição do DO/WHILE se a letra está errada, o ideal seria mudar para while (palavraerrada<=5 && palavracerta <= 5); // Coloquei o <= 5 na palavracerta pois não sei como você quer verificar se a pessoa acertou ou não a palavra toda

Olá amigo. Estive dando uma olhada no exercício que você precisa fazer e tbém no seu código.

Eu poderia passar um código pronto p vc, mas daí você não iria aprender nada. Então, creio que o melhor a fazer seria dar algumas dicas.

O primeiro problema no seu código é q você está verificando se a letra existe ou não da maneira errada. Não sei dizer se você já viu alguma coisa sobre ponteiro ou Strings. Vou passar as dicas considerando q você já viu um pouco sobre isso q falei.

A primeira coisa a fazer seria criar uma maneira de poder selecionar manualmente como escolher uma palavra. Para isso daria para fazer algo assim:

char *palavraSelecionada;

palavraSelecionada = palavras[0] // nesse exemplo, estou escolhendo a primeira palavra, q seria computador e passando o valor dela para minha variável

outro exemplo:

palavraSelecionada = palavras[2] // seria para escolher a palavra teclado  etc...

Depois de feito isso, o ideal seria usar o comando strlen(palavraSelecionada) na condição do for, assim você teria o tamanho certo da palavra. Mas, caso ainda não chegou nessa parte, coloque tipo assim no for (i = 0; i < 10; i++) // Esse 10 seria o tamanho máximo que as palavras poderiam ter. Se colocar uma palavra maior do q 10 posicões, teria que colocar 15. Esse valor seria apenas uma quantidade onde todas as palavras que você usar couberem.

Se entendeu até aqui ok. Vamos dar sequencia...

Outra coisa é que você está verificando dentro do for se está certa com um if e depois com um else, daí não funciona, teria que criar uma variável do tipo int para dá verificar se está errada. Ex: int correta; , Depois, no início do while coloque correto = 0;

Feito isso, se a pessoa acertou uma letra, também mude o valor dessa variável, ex: correto = 1;

Depois que verificar com o if se a letra está na palavra, faça um outro if só que daí fora do for. Tem que ser assim:

if (correto == 0)

{

      // letraErrada

}

para verificar se a letra digitada esta ou não na palavra, procure assim:

for (i = 0; i < 15; i++)

     if (palavraSelecionada == letra)

    {

     // letra correta

     correto = 1;

   }

} // aqui termina o for

if (correto == 0)

{

      // letraErrada

}

 

Experimente fazer o exercício agora usando essas dicas e daí diz até aonde você chegou, ok?

Outra coisa. Você está apenas verificando na condição do DO/WHILE se a letra está errada, o ideal seria mudar para while (palavraerrada<=5 && palavracerta <= 5); // Coloquei o <= 5 na palavracerta pois não sei como você quer verificar se a pessoa acertou ou não a palavra toda

Olá amigo. Estive dando uma olhada no exercício que você precisa fazer e tbém no seu código.

Eu poderia passar um código pronto p vc, mas daí você não iria aprender nada. Então, creio que o melhor a fazer seria dar algumas dicas.

O primeiro problema no seu código é q você está verificando se a letra existe ou não da maneira errada. Não sei dizer se você já viu alguma coisa sobre ponteiro ou Strings. Vou passar as dicas considerando q você já viu um pouco sobre isso q falei.

A primeira coisa a fazer seria criar uma maneira de poder selecionar manualmente como escolher uma palavra. Para isso daria para fazer algo assim:

char *palavraSelecionada;

palavraSelecionada = palavras[0] // nesse exemplo, estou escolhendo a primeira palavra, q seria computador e passando o valor dela para minha variável

outro exemplo:

palavraSelecionada = palavras[2] // seria para escolher a palavra teclado  etc...

Depois de feito isso, o ideal seria usar o comando strlen(palavraSelecionada) na condição do for, assim você teria o tamanho certo da palavra. Mas, caso ainda não chegou nessa parte, coloque tipo assim no for (i = 0; i < 10; i++) // Esse 10 seria o tamanho máximo que as palavras poderiam ter. Se colocar uma palavra maior do q 10 posicões, teria que colocar 15. Esse valor seria apenas uma quantidade onde todas as palavras que você usar couberem.

Se entendeu até aqui ok. Vamos dar sequencia...

Outra coisa é que você está verificando dentro do for se está certa com um if e depois com um else, daí não funciona, teria que criar uma variável do tipo int para dá verificar se está errada. Ex: int correta; , Depois, no início do while coloque correto = 0;

Feito isso, se a pessoa acertou uma letra, também mude o valor dessa variável, ex: correto = 1;

Depois que verificar com o if se a letra está na palavra, faça um outro if só que daí fora do for. Tem que ser assim:

if (correto == 0)

{

      // letraErrada

}

para verificar se a letra digitada esta ou não na palavra, procure assim:

for (i = 0; i < 15; i++)

     if (palavraSelecionada == letra)

    {

     // letra correta

     correto = 1;

   }

} // aqui termina o for

if (correto == 0)

{

      // letraErrada

}

 

Experimente fazer o exercício agora usando essas dicas e daí diz até aonde você chegou, ok?

Outra coisa. Você está apenas verificando na condição do DO/WHILE se a letra está errada, o ideal seria mudar para while (palavraerrada<=5 && palavracerta <= 5); // Coloquei o <= 5 na palavracerta pois não sei como você quer verificar se a pessoa acertou ou não a palavra toda

Olá amigo. Estive dando uma olhada no exercício que você precisa fazer e tbém no seu código.

Eu poderia passar um código pronto p vc, mas daí você não iria aprender nada. Então, creio que o melhor a fazer seria dar algumas dicas.

O primeiro problema no seu código é q você está verificando se a letra existe ou não da maneira errada. Não sei dizer se você já viu alguma coisa sobre ponteiro ou Strings. Vou passar as dicas considerando q você já viu um pouco sobre isso q falei.

A primeira coisa a fazer seria criar uma maneira de poder selecionar manualmente como escolher uma palavra. Para isso daria para fazer algo assim:

char *palavraSelecionada;

palavraSelecionada = palavras[0] // nesse exemplo, estou escolhendo a primeira palavra, q seria computador e passando o valor dela para minha variável

outro exemplo:

palavraSelecionada = palavras[2] // seria para escolher a palavra teclado  etc...

Depois de feito isso, o ideal seria usar o comando strlen(palavraSelecionada) na condição do for, assim você teria o tamanho certo da palavra. Mas, caso ainda não chegou nessa parte, coloque tipo assim no for (i = 0; i < 10; i++) // Esse 10 seria o tamanho máximo que as palavras poderiam ter. Se colocar uma palavra maior do q 10 posicões, teria que colocar 15. Esse valor seria apenas uma quantidade onde todas as palavras que você usar couberem.

Se entendeu até aqui ok. Vamos dar sequencia...

Outra coisa é que você está verificando dentro do for se está certa com um if e depois com um else, daí não funciona, teria que criar uma variável do tipo int para dá verificar se está errada. Ex: int correta; , Depois, no início do while coloque correto = 0;

Feito isso, se a pessoa acertou uma letra, também mude o valor dessa variável, ex: correto = 1;

Depois que verificar com o if se a letra está na palavra, faça um outro if só que daí fora do for. Tem que ser assim:

if (correto == 0)

{

      // letraErrada

}

para verificar se a letra digitada esta ou não na palavra, procure assim:

for (i = 0; i < 15; i++)

     if (palavraSelecionada == letra)

    {

     // letra correta

     correto = 1;

   }

} // aqui termina o for

if (correto == 0)

{

      // letraErrada

}

 

Experimente fazer o exercício agora usando essas dicas e daí diz até aonde você chegou, ok?

Outra coisa. Você está apenas verificando na condição do DO/WHILE se a letra está errada, o ideal seria mudar para while (palavraerrada<=5 && palavracerta <= 5); // Coloquei o <= 5 na palavracerta pois não sei como você quer verificar se a pessoa acertou ou não a palavra toda

Editado por Visitante
Erro ao postar a resposta, cliquei no <enter> e a resposta já foi enviada, porém ainda não estava completa
Link para o comentário
Compartilhar em outros sites

  • 0

Olá, só corrigindo uma parte que coloquei errada na resposta. Para verificar se a letra está correta tem que fazer assim:

if (palavraSelecionada == letra) // É o seguinte, é minha 1ª publicação aqui então não sei ao certo como                                                                          postar um código, seria: 

if (palavraSelecionada[i] == letra)
{
   letraCorreta
}

 

 

Olá, só corrigindo uma parte que coloquei errada na resposta. Para verificar se a letra está correta tem que fazer assim:

if (palavraSelecionada[i] == letra)
{
 //  letraCorreta
}

 

Olá, só corrigindo uma parte que coloquei errada na resposta. Para verificar se a letra está correta tem que fazer assim:

if (palavraSelecionada[i] == letra)
{
 //  letraCorreta
}

 

Editado por Visitante
Link para o comentário
Compartilhar em outros sites

  • 0

Outra coisa que esqueci de falar. 

Na linguagem C você precisa limpar o buffer de entrada manualmente. Então, no seu código, para fazer isso fica assim:

char *limparBuffer;

printf("\nEntre com uma letra: ");
scanf("%c", &letra);
scanf("%c", &limparBuffer); // Essa linha é ignorada pelo compilador, ela serve apenas para limpar o q chamamos de buffer de entrada

Ao meu ver, seus professores já deveriam ter falado sobre isso. E já adianto que você vai usar muito esse recurso.

Desde já peço desculpas ao autor da pergunta e aos moderadores desse site pelos na minha resposta com relação a publicar a mesma. É a minha primeira postagem nesse site

Link para o comentário
Compartilhar em outros sites

  • 0

Bem, como errei muitas vezes ao tentar publicar minha resposta, vou passar o código todo do exercício

Seria esse:

#include <stdio.h>
#include "string.h"

int main()

{
 
char palavras [5][20]={"computador","livro","teclado","agua","lixeira"};
char letra;
int palavraerrada=0,palavracerta=0,i;
char *limparBuffer;
int correto;

char *palavraSelecionada = palavras[0];

printf("%s", palavraSelecionada); 

do
{
	correto = 0;
	printf("\nEntre com uma letra: ");
	scanf("%c", &letra);
	scanf("%c", &limparBuffer);

  	for(i = 0; i < 10; i++)
    {
    	
       if(palavraSelecionada[i] == letra)
         {
            printf("\nA letra %c ocupa a posicao %d da palavra.\n",letra,i+1);
            palavracerta = palavracerta + 1;
            correto = 1;
        }
    }
	if (correto == 0) // daria para colocar if (!correto) que funciona da mesma maneira
	{
		printf("A palavra não contem a letra %c.",letra);
		palavraerrada=palavraerrada+1;
	}    
	} while (palavraerrada<=5 && palavracerta <= 5);   
	
	if (palavraerrada >= 5)
	{
		printf("Voce perdeu");
	}
	else if (palavracerta >= 5)
	{
		printf("Voce ganhou");
	}                        
          
  	system("pause");    

	return 0;
}      

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...