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

[Dúvida] Código não compila

O Código da erro no" jachutou".

ERRO:

 error: conflicting types for 'jachutou'
 int jachutou(char letra) {
     ^~~~~~~~
     
d:\Estudos\Alura\forca.c:90:1: note: an argument type that has a default promotion can't match an empty parameter name list declaration
 int jachutou(char letra) {
 ^~~
 
In file included from d:\Estudos\Alura\forca.c:4:0:
d:\Estudos\Alura\forca.h:7:5: note: previous declaration of 'jachutou' was here    
 int jachutou();
     ^~~~~~~~

CÓDIGO:

#include <stdio.h>
#include <string.h>
#include <windows.h>
#include "forca.h"
#include <time.h>
#include <stdlib.h>

//Variaveis globais
    char chutes[26];
    int chutesdados = 0;
    char palavrasecreta[20];

void abertura() {
    printf("/****************/\n");
    printf("/ Jogo de Forca */\n");
    printf("/****************/\n\n");
}

void chuta() {
    char chute;
    scanf(" %c", &chute);

    chutes[chutesdados] = chute;
    chutesdados++;
}



void desenhaforca() {

    printf("Você já deu %d chutes\n", chutesdados);

    for(int i = 0; i < strlen(palavrasecreta); i++) {

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

    }
    printf("\n");

}

void escolhepalavra() {
    FILE* f;
    f = fopen("palavras.txt", "r");

    srand(time(0));
    int qtdpalavra;
    fscanf(f, "%d", &qtdpalavra);

    int randomico = rand() % qtdpalavra;

        for(int i = 0; i <= randomico; i++){
            fscanf(f, "%s", palavrasecreta);
        }

    fclose(f);
}

 int acertou() {
    for(int i=0; i < strlen(palavrasecreta);i++) {
        if(!jachutou(palavrasecreta[i])){
            return 0;
        }
    }
    return 1;
 }
int enforcou(){
    int erros = 0;

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

        for (int j = 0; j < strlen(palavrasecreta); j++){
            if(chutes[i] == palavrasecreta[j]){
                existe = 1;
                break;
            }
            
        }
        if (!existe) erros++;
    }
    return erros >= 5;
    
}

int jachutou(char letra) {
    int achou = 0;
    for(int j = 0; j < chutesdados; j++) {
        if(chutes[j] == letra) {
            achou = 1;
            break;
        }
    }

    return achou;
}

int main() {
    

    // Configuração da página de código UTF-8
    unsigned int CPAGE_UTF8 = 65001;
    unsigned int CPAGE_DEFAULT = GetConsoleOutputCP();
    SetConsoleOutputCP(CPAGE_UTF8);

    abertura();
    escolhepalavra();

    do {

        desenhaforca();
        chuta();

    } while (!acertou() && !enforcou());

}
1 resposta
solução!

Olá, Eduardo!

Pelo que pude analisar, o erro que você está enfrentando ocorre devido a uma declaração conflitante da função "jachutou". Na linha 7 do arquivo "forca.c", você está declarando a função com um parâmetro do tipo "char", enquanto na linha 7 do arquivo "forca.h" a função está sendo declarada sem nenhum parâmetro.

Para resolver esse problema, você precisa garantir que a declaração da função seja consistente em ambos os arquivos. Se a função "jachutou" deve receber um parâmetro do tipo "char", então você precisa adicionar esse parâmetro na declaração da função no arquivo "forca.h".

Aqui está um exemplo de como você pode modificar a declaração da função no arquivo "forca.h":

int jachutou(char letra);

Dessa forma, a declaração da função será consistente em ambos os arquivos e o erro deve ser resolvido.

Espero ter ajudado e bons estudos!

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