• 0
Sign in to follow this  
Lucas Conrado

Forca em C

Question

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

 

 

 

Edited by Lucas Conrado

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0
Guest

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

Edited by Guest
Erro ao postar a resposta, cliquei no <enter> e a resposta já foi enviada, porém ainda não estava completa

Share this post


Link to post
Share on other sites
  • 0
Guest

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
}

 

Edited by Guest

Share this post


Link to post
Share on other sites
  • 0
Guest

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

Share this post


Link to post
Share on other sites
  • 0
Guest

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

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this