Ir ao conteúdo
  • Cadastre-se

carlos.bozza

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

posts postados por carlos.bozza

  1. Boa noite, alguém pode me ajudar a completar esse código abaixo, sou iniciante e não sei como eu poderia completa-lo. aceito também se identificarem melhorias nele.

     

    código abaixo:

    #include <stdio.h>
    #include <string.h>
    #include <locale.h>
                             
    
    int main() {    
        char resposta[20];  
        int erros;          
        int acertos;         
        char letra;          
        int i, j;            
        int max;
               
     
                              
        setlocale(LC_ALL, "Portuguese");
        printf("************ Jogo da Forca ************\n");        
        printf("************** Jogador 1 **************\n\n");
        printf("Utilize apenas letras minúsculas.\n");
        printf("Máximo de 20 letras\n\n");
    
        letra = ' '; max = 1;             
        for (i = 1; i <= 20; i++) {   
            resposta = ' ';   
        }
        erros = 0; acertos = 0;
    
        printf("Digite a palavra secreta: ");
        scanf (" %s", resposta);
        max = strlen (resposta);
        system("clear||cls");  
            
        printf("************ Jogo da Forca ************\n");   
        printf("************** Jogador 2 **************\n\n");
        printf("Utilize apenas letras minúsculas.\n");
        printf("Limite de 6 erros. Palavra de até 20 letras\n\n");
    
        while ( erros < 6 )    
        {
              printf("Digite uma letra: ");
              scanf (" %c", &letra);
              j = 0;
              for (i = 0; i <= max; i++)
              {
                   if (resposta == letra)
                   {
                       acertos++; j++;
                       printf ("\nAcertos: %d - Erros: %d\n",acertos, erros);
                   }
              }
              if (j <= 0)      
                    erros++;
    
    \* ------------------- Aqui falta a parte responável pela verificação de vitoria ou derrota ----------------------*/
    
    \* -------------------------------------- Final da Verificação ----------------------------------------------------------------*/
    
        }
        return (0);
    }

     

    • Amei 1
  2. Em 20/06/2020 às 00:10, arfneto disse:

    Tem um loop dentro da função que fica insistindo até o cara acertar cada senha. O que pode fazer por exemplo é mudar para retornar assim que ele digitar, retornando por exemplo 0 se o cara errou a senha, e no programa principal pegar as senhas na sequência como antes, mas dentro de um loop, algo assim como

    
    int main()
    {
    	int tentativas = 3;
    	int senhas = 5;
    	int ok = 0;
    	const int senha[5] = { 1, 99, 17, 57, 50 };
    
    	// vai ter 'x' tentativas de acertar as 'y' senhas
    	for (int t = 0; t < tentativas; t = t + 1)
    	{   
    		ok = 0;
    		printf("\nTentativa %d de %d\n\n", 1 + t, tentativas);
    		for (int f = 0; f < senhas; f = f + 1)
    		{	// se o cara errou tenta ate 'tentativas'
    			if (fase(f, senha[f]) == 0) break;
    			ok = ok + 1; // passou mais uma
    		};
    		if (ok != senhas) continue; // outra tentativa
    
    		printf("\nPORTA LIBERADA!\n\n");
    		return 0;
    	};
    	printf("\nTente outra vez. Encerrando!...\n\n");
    	return 0;
    };

    Nesse exemplo ele poderia tentar 3 vezes. 'ok' soma um pra cada senha certa. a variável 'senhas' tem o total de senhas então é só comparar. Agora a função fica sem aquele loop, certo?

    
    int fase(int etapa, int alvo)
    {
    	int numero = -1;
    
    	printf("[Etapa %d de 5] Digite o numero: ", 1+etapa);
    	scanf("%d", &numero);
    
    	/*while (numero != alvo)
    	{
    		printf("\nVoce digitou um numero incorreto!\n");
    		printf("Tente novamente\n\n");
    		printf("[Etapa %d de 5] Digite o numero: ", etapa);
    		scanf("%d", &numero);
    	};*/
    	if (numero != alvo) return 0;
    	printf("voce passou pela etapa %d! Continue...\n\n", 1+etapa);
    	return 1; 
    };

    deixando como comentário o que tinha antes: retorna 0 se o cara errou ou o alvo se ele acertou.

     

    Rodando seria algo assim

    
    Tentativa 1 de 3
    
    [Etapa 1 de 5] Digite o numero: 1
    voce passou pela etapa 1! Continue...
    
    [Etapa 2 de 5] Digite o numero: 12112
    
    Tentativa 2 de 3
    
    [Etapa 1 de 5] Digite o numero: 1
    voce passou pela etapa 1! Continue...
    
    [Etapa 2 de 5] Digite o numero: 99
    voce passou pela etapa 2! Continue...
    
    [Etapa 3 de 5] Digite o numero: 17
    voce passou pela etapa 3! Continue...
    
    [Etapa 4 de 5] Digite o numero: 57
    voce passou pela etapa 4! Continue...
    
    [Etapa 5 de 5] Digite o numero: 50
    voce passou pela etapa 5! Continue...
    
    
    PORTA LIBERADA!

    Claro que há muitas maneiras de fazer isso, mas assim da pra rodar. Talvez pudesse dar umas chances dentro da fase() pro cara tentar umas vezes cada senha ao invés de uma só, ou não?

     

    Bom dia, sou iniciante e estava tentando utilizar o exemplo que você disponibilizou, porém, estou com o seguinte problema, minha etapa ja esta começando a partir da etapa 2, exemplo: etapa 2 de 5. Sabe se coloquei algo errado? E também esta ocorrendo de quando eu erro acerto, por exemplo, a primeira etapa, a segunda, e em seguida erro a terceira, na tela aparece para começar a etapa 2 novamente, porém se eu digito a senha da 3 etapa, o sistema esta aceitando normalmente. olha o print, por gentileza.

    Segue o código que estou usando:

     

    #include <stdio.h>
    int fase(int etapa, int alvo);

    int main()
    {
        fase(1, 01);
        fase(2, 91);
        fase(3, 29);
        fase(4, 75);
        fase(5, 55);
        printf("\nTRANCA LIBERADA, ABRA A PORTA!\n\n");
        return;
    };

    int fase(int etapa, int alvo)
    {
        int numero = -1;

        printf("[Etapa %d de 5] Digite o numero: ", 1+etapa);
        scanf("%d", &numero);

        while (numero != alvo)
        {
            printf("\nVoce digitou um numero incorreto!\n");
            printf("Tente novamente\n\n");
            printf("[Etapa %d de 5] Digite o numero: ", etapa);
            scanf("%d", &numero);
        };
        if (numero != alvo) return 0;
        printf("voce passou pela etapa %d! Continue...\n\n", 1+etapa);
        return 1; 
    };

     

     

     

     

     

    Desde já, agradeço a atenção.

    exemplo-tela.png

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!