1
resposta

Meu código aparentemente está certo e mesmo assim dá erro.

#include <stdio.h>

#include <string.h>

#include <locale.h>

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

    printf("Obrigado por jogar!\n");
    printf("\n");
    printf("|\\---/|\n");
    printf("| o_o |\n");
    printf(" \\_^_/\n");
    printf("\n");
}
void chuta(char chutes[26], int* tentativas){
    char chute;
    scanf(" %c", & chute);

    chutes[(*tentativas)] = chute;
    (*tentativas)++;

    
int jachutou(char letra, char chutes[26], int tentativas){
    int achou = 0;

       for (int j = 0; j < tentativas; j++) {
    if (chutes[j] == letra) {
    achou = 1;

        break;
        }
      }

return achou;


}



}
int main() {
  setlocale(LC_ALL, "Portuguese");
  char palavrasecreta[20];

  sprintf(palavrasecreta, "MELANCIA");

  int acertou = 0;
  int enforcou = 0;

  char chutes[26];
  int tentativas = 0;

  abertura();
  
  do {

      // imprime a palavra secreta
    for (int i = 0; i < strlen(palavrasecreta); i++) {

      
        int achou = jachutou(palavrasecreta[i], chutes, tentativas);

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

      } else {
        printf("_ ");
      }

    }
    printf("\n");
    
    chuta(chutes, &tentativas);
    tentativas++;
  }

  while (!acertou && !enforcou);
}

quando compilo ele me retorna esse erro:

forca.c: In function 'main': forca.c:68:18: warning: implicit declaration of function 'jachutou' [-Wimplicit-function-declaration] int achou = jachutou(palavrasecreta[i], chutes, tentativas); ^~~~~~~~

1 resposta

Existem alguns problemas no código:

  1. A função Chuta() incrementa 'Tentativas' duas vezes
  2. No laço do-while a lógica de saída não encerra o jogo quando o jogador acertar ou errar.

O código corrigido seria assim:

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

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

void chuta(char chutes[26], int* tentativas){
    char chute;
    scanf(" %c", &chute);

    chutes[(*tentativas)] = chute;
    (*tentativas)++;
}

int jachutou(char letra, char chutes[26], int tentativas){
    int achou = 0;

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

    return achou;
}

int main() {
    setlocale(LC_ALL, "Portuguese");
    char palavrasecreta[20];
    sprintf(palavrasecreta, "MELANCIA");

    int acertou = 0;
    int enforcou = 0;

    char chutes[26];
    int tentativas = 0;

    abertura();

    do {
        // Imprime a palavra secreta
        for (int i = 0; i < strlen(palavrasecreta); i++) {
            int achou = jachutou(palavrasecreta[i], chutes, tentativas);

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

        chuta(chutes, &tentativas);

    } while (!acertou && !enforcou);

    return 0;
}

No fim coloquei um return 0 também por força do hábito. Se isso sanou sua dúvida, por favor marque o tópico como solucionado. Se não, fique a vontade para perguntar.