Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Funções

#include <iostream>
#include <string.h>
using namespace std;

int imprimePalavraSecreta(int tentativas);
void abertura();
char capturaChute();
bool testaChute(char palavraSecreta, char chutes, int tentativas);

int main()
{
    setlocale(LC_ALL,"");  // Ativa o uso de acentos
    // -------------------------------
    
    int tentativas = 0;
    
    abertura();
    tentativas += imprimePalavraSecreta(tentativas);
    
    // -------------------------------
    system("pause");
    return 0;
}

int imprimePalavraSecreta(int tentativas)
{
    bool acertou = false, enforcou = false, achou = false;
    
    int i, j;
    
    char chutes[26], chute, palavraSecreta[8];
   
    
    
    sprintf(palavraSecreta, "MELANCIA");
    do
        {
            chute = capturaChute();
            chutes[tentativas] = chute;
            tentativas++; 
            
            achou = testaChute(char palavraSecreta, char chutes, int tentativas);
                   
            if(achou) {
                printf("%c ", palavraSecreta[i]);
                achou = false;
            } else {
                printf("_ ");
            }
        }while(!acertou &&  !enforcou);
        return tentativas;
}

void abertura()
{
    cout << "************************\n";
    cout << "*    JOGO DE FORCA     *\n";
    cout << "************************\n\n";
}

char capturaChute()
{
     char chute;
        
     cout << "Informe seu chute: ";
     cin >> chute;
     
     return chute;
}

bool testaChute(char palavraSecreta, char chutes, int tentativas)
{    
    bool achou;
    int i, j;
     
    for(int i = 0; i < strlen(palavraSecreta); i++) {
        for(int j = 0; j < tentativas; j++) {
            if(chutes[j] == palavraSecreta[i]) {
                achou = true;
            }else{
                achou = false;
            }
        }
        return achou;
}

Não está compilando

1 resposta
solução!

Olá Pedro! Tudo bem?

Vamos dar uma olhada no seu código e ver o que pode estar causando os problemas de compilação. Existem alguns pontos que precisam ser ajustados para que o código funcione corretamente. Vou destacar os principais problemas e sugerir correções.

  • Declaração e uso das variáveis: As variáveis palavraSecreta e chutes são passadas de forma incorreta para a função testaChute. Além disso, elas precisam ser declaradas corretamente no escopo adequado.

  • Uso da função strlen: É necessário incluir a biblioteca <cstring> para usar a função strlen.

  • Correção na função testaChute: A lógica dentro da função testaChute precisa ser ajustada para retornar corretamente se a letra foi encontrada ou não.

Vamos corrigir o código passo a passo:

  1. Código Corrigido

    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int imprimePalavraSecreta(int tentativas, char palavraSecreta[], char chutes[]);
    void abertura();
    char capturaChute();
    bool testaChute(char palavraSecreta[], char chutes[], int tentativas);
    
    int main()
    {
        setlocale(LC_ALL,"");  // Ativa o uso de acentos
        // -------------------------------
    
        int tentativas = 0;
        char palavraSecreta[8] = "MELANCIA";
        char chutes[26] = {0}; // Inicializa o array de chutes com zeros
    
        abertura();
        tentativas += imprimePalavraSecreta(tentativas, palavraSecreta, chutes);
    
        // -------------------------------
        system("pause");
        return 0;
    }
    
    int imprimePalavraSecreta(int tentativas, char palavraSecreta[], char chutes[])
    {
        bool acertou = false, enforcou = false;
    
        do
        {
            for(int i = 0; i < strlen(palavraSecreta); i++) {
                bool achou = false;
                for(int j = 0; j < tentativas; j++) {
                    if(chutes[j] == palavraSecreta[i]) {
                        achou = true;
                        break;
                    }
                }
                if(achou) {
                    printf("%c ", palavraSecreta[i]);
                } else {
                    printf("_ ");
                }
            }
            printf("\n");
    
            char chute = capturaChute();
            chutes[tentativas] = chute;
            tentativas++; 
    
            acertou = testaChute(palavraSecreta, chutes, tentativas);
    
        } while(!acertou && !enforcou);
    
        return tentativas;
    }
    
    void abertura()
    {
        cout << "************************\n";
        cout << "*    JOGO DE FORCA     *\n";
        cout << "************************\n\n";
    }
    
    char capturaChute()
    {
         char chute;
    
         cout << "Informe seu chute: ";
         cin >> chute;
    
         return chute;
    }
    
    bool testaChute(char palavraSecreta[], char chutes[], int tentativas)
    {    
        for(int i = 0; i < strlen(palavraSecreta); i++) {
            for(int j = 0; j < tentativas; j++) {
                if(chutes[j] == palavraSecreta[i]) {
                    return true;
                }
            }
        }
        return false;
    }
    
  2. Explicação das Correções

    • Passagem de Variáveis: As variáveis palavraSecreta e chutes foram passadas corretamente para as funções imprimePalavraSecreta e testaChute.

    • Correção na Função testaChute: A função testaChute agora percorre a palavraSecreta e os chutes corretamente, retornando true se a letra foi encontrada.

    • Uso Correto de strlen: Incluímos a biblioteca <cstring> para usar a função strlen.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.