Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Blue Dark

[Resolvido] If não funciona

Recommended Posts

Bem... Estou fazendo um jogo da forca e me deparei com um problema que não consigo descobri o motivo...

 

aqui esta o código:

 

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

int main(void)
{
	char Palavra_Secreta[50] = {},Palavra_Player[50] = {},Letra[20];
	int a,vida=7,i=0;
	printf("\n\t\t\t-----------------------\n\t\t\t	 Jogo da Forca\n\t\t\t-----------------------\n\n");
	printf("Insira a palavra a ser descoberta: ");
	scanf("%[^\n]%*c",Palavra_Secreta);
	system("CLS");
	while(vida != 0)
	{
		system("CLS");
		printf("\n\t-------------\n\tVidas: %d\n\t-----------",vida);
		printf("\n\n\t\t");
		a=0;
		for(i=0;i < strlen(Palavra_Secreta);i++)
		{
			 if (Palavra_Secreta[i] == ' ' || Palavra_Secreta[i] == '-')
			 {
				printf(" %c",Palavra_Secreta[i]);
				Palavra_Player[i] =  Palavra_Secreta[i];

			 }
			 else
			 {
				 if(Palavra_Secreta[i] == Letra[0] && Palavra_Player[i] != Letra[0])
				  {
						printf(" %c",Palavra_Secreta[i]);
						Palavra_Player[i] = Letra[0];
						a++;
				  }
				  else
				  {
						if(Palavra_Player[i] == Palavra_Secreta[i])
						{
							  printf(" %c",Palavra_Secreta[i]);			  
						}
						else
						{
							  printf(" _");	  
						}
				  }
			  }  
		  }
		  if(a==0)vida--;
		  if(strcmp(Palavra_Secreta,Palavra_Player) == 0)
		  {
			   printf("\n\n\t\t\tVoce Ganhou");
			   vida = 0;
		  }
		  else
		  {
			   printf("\n\nDigite uma letra: ");
			   scanf("%[^\n]%*c",Letra);
		  }
	 

	}
	scanf("%*c");
	
	}

O problema é que as vezes (principalmente na primeira vez) mesmo com a várivale a diferente de zero o if é ativado e executa o vida-- que decrementa a variável (é assim que se escreve =P?) e as vezes quando é igual a 0 não acontece nada... O que pode ter de errado no código....

 

Ps: se quiserem opinar tbm para alguma melhoria no codigo podem falar =)

 

 

Desde já obrigado http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

 

http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Blue Dark, tudo certo??

 

Antes de mais... Divida esse código em funções auxiliares!!!

É meio confuso de ler o código assim, em uma só função!

 

a tua variável a está sendo incrementada na hora errada!

Na primeira iteração, ele não entra naquele:

if(Palavra_Secreta[i] == Letra[0] && Palavra_Player[i] != Letra[0])
então "a" continua sendo 0.

você tem duas opções, incrementar a em outra parte do código ou decrementar (acho que é assim q c escreve...=P) vida em outra parte...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma olhada ONDE você está pedindo uma letra p/ o jogador: depois de fazer a verificação na primeira vez, sem ter nenhuma letra p/ conferir. Por isso que o "if não funciona".

 

Eu não entendi: você pede uma letra e usa um array p/ guardar e sempre verifica a posição zero. Use char de uma vez.

 

Ao invés de ter uma variável a, que não quer dizer nada, coloque acertos.

 

 

 if(Palavra_Player[i] == Palavra_Secreta[i])
					{
						  printf(" %c",Palavra_Secreta[i]);			  
					}
					else
					{
						  printf(" _");	  
					}

 

Não precisa de chaves nisso.

 

 

if(strcmp(Palavra_Secreta,Palavra_Player) == 0)  {
		   printf("\n\n\t\t\tVoce Ganhou");
		   vida = 0;
	  }

 

Um break também serve ao invés de vida=0.

 

 

Aqui o programa perde algumas letras.

 

Insira a palavra a ser descoberta: jogo

 

-------------

Vidas: 7

-----------

 

 

 

Digite uma letra: o

_ o _ o

-------------

Vidas: 7

-----------

 

 

 

Digite uma letra: j

j o _ o

-------------

Vidas: 7

-----------

 

 

 

Digite uma letra: g

_ o g o

-------------

Vidas: 7

-----------

 

 

 

Digite uma letra:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de mais... Divida esse código em funções auxiliares!!!

É meio confuso de ler o código assim, em uma só função!

Por enquanto so tava testando se a lógica ia funcionar... Pode deixar que eu vou dividir isso em funções =)

 

-----

É percebi no que eu estava errando.... o problema era o instante em que mostrava as vidas na tela, não era o valor real naquele momento... ja concegui concertar.. vlw =D

 

-------

 

Eu não entendi: você pede uma letra e usa um array p/ guardar e sempre verifica a posição zero. Use char de uma vez.

Tentei usar apenas como char mas dava problema quando ele digitava mais de um caracter =|

 

-------

 

Um break também serve ao invés de vida=0.

É não tinha pensando em usar break.. vlw =)

 

------

 

Ao invés de ter uma variável a, que não quer dizer nada, coloque acertos.

É eu tinha trocado pra a so para testar se era algum problema relacionado ao nome.. mas antes tava acertos o nome da variavel =P

 

-----

 

Aqui o programa perde algumas letras.

É eu percebi isso mas não entendi o porque... mas agora eu ja testei varias vezes e não acontece mais =D

 

-----

 

Vlw VictorCacciari e import java.Isis pela ajuda... Ajudaram bastante ^^

 

http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.