Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Meu codigo está dando erro

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

int ganhou(char palavrasecreta[20], char chutes[26], int chutesdados)
{
        for(int j = 0; j < strlen(palavrasecreta); j++)
        {
                if(!jaachou(palavrasecreta[j]))
                {
                        return 0;
                }
        }
        return 1; 
}
int enforcou(int chutesdados, char chutes[26], char palavrasecreta[20])
{
        int errou = 0;

        for(int i = 0; i < chutesdados; i++)
        {
                int acertou = 0;

                for(int j = 0; j < strlen(palavrasecreta); j++)
                {
                        if(chutes[i] == palavrasecreta[j])
                        {
                                acertou = 1;
                                break;
                        }
                }
                if(!acertou) errou++;
        }
        return errou >= 5;
}
void chuta(char chutes[26], int* chutesdados) //int* para dizer que está recebendo o ponteiro dessa variavel
{
        char chute;

        printf("Digite sua letra\n");
        scanf(" %c", &chute);

        chutes[*chutesdados] = chute;
        (*chutesdados)++; //(*) Para dizer que é para passar para o ++ para a variavel e não o ponteiro dela
}

int jaachou(int chutesdados, char chutes[26], char palavrasecreta) //criando uma função com int para enviar uma variavel 
{
        int achou = 0;

        for(int j = 0; j < chutesdados; j++) //looping para para verificar todo o array chutes
        {
                if(chutes[j] == palavrasecreta) //se chutes[0] for igual palavrasecreta[0]
                {
                        achou = 1;
                        break;
                }
        }
        return achou; //mandando a variavel achou
}
void contarpalavras(int chutesdados, char chutes[26], char palavrasecreta[20])
{

        for(int i = 0; i < strlen(palavrasecreta); i++) //looping para contar o numero de letras na palavra
        {
                int achou = jaachou(chutesdados, chutes, palavrasecreta[i]); //recebendo a variavel achou 

                if(achou)
                {
                        printf("%c ", palavrasecreta[i]);
                }else{
                        printf("_ ");
                }
                }
}

void escolherpalavra(char palavrasecreta[20])
{
        sprintf(palavrasecreta, "BANANA"); //mandando a palavra banana para a array palavrasecreta
}

int main()
{
        char palavrasecreta[20]; //array = conjunto de letras
        char letra;
        char chutes[26];
        int chutesdados = 0;

        escolherpalavra(palavrasecreta);

        do
        {
                contarpalavras(chutesdados, chutes, palavrasecreta);
                chuta(chutes, &chutesdados); //& é para enviar o endereço dela 

        }while(!ganhou(palavrasecreta, chutes, chutesdados) && !enforcou(chutesdados, chutes, palavrasecreta)); 
}
3 respostas

Opa Victor, Beleza? Pra encontrar o erro no seu código seria muito mais simples se você mandasse o log do console, dizendo em qual linha se encontra o erro. Tem como você mandar aqui? :D

Opa José, desculpa a inconveniência, tem sim.

forca.c: In function ‘ganhou’:
forca.c:8:7: warning: implicit declaration of function ‘jaachou’ [-Wimplicit-function-declaration]
    8 |   if(!jaachou(palavrasecreta[j]))
      |       ^~~~~~~
forca.c: At top level:
forca.c:47:5: error: conflicting types for ‘jaachou’
   47 | int jaachou(int chutesdados, char chutes[26], char palavrasecreta) //criando uma função com int para enviar uma variavel
      |     ^~~~~~~
forca.c:48:1: note: an argument type that has a default promotion can’t match an empty parameter name list declaration
   48 | {
      | ^
forca.c:8:7: note: previous implicit declaration of ‘jaachou’ was here
    8 |   if(!jaachou(palavrasecreta[j]))
solução!

Certo... Pelo que pude perceber, na linha 8:

8 |   if(!jaachou(palavrasecreta[j]))

você chama a função

int jaachou(int, char, char)

porém, essa mesma função só é declarada na linha 47. Pra chamar uma função, você deve declará-la antes, pois o compilador irá ler linha por linha. Além disso, quando você usa a função na linha 8, você passa apenas 1 argumento "palavrasecreta[j]", quando na verdade a função recebe 3 argumentos. Tenta ver se isso resolve!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software