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

Ele não está conseguindo finalizar a execução

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

char chutes[26];
int chutesDados = 0;
char palavrasecreta[20];

void abertura();
void chuta();
int  jachutou(char letra);
void desenhaforca();
int  enforcou();
int  acertou();
void escolhePalavra();
void adicionaPalavra();

int main() {
    setlocale(LC_ALL, "Portuguese");
    sprintf(palavrasecreta, "MELANCIA");

    abertura();

    do {
        desenhaforca();
        chuta();
    } while (!acertou() && !enforcou());

    return 0;
}

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

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

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

int jachutou(char letra){
    int achou = 0;

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

    return achou;
}

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");

}

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 acertou(){
    for(int j = 0; j < strlen(palavrasecreta); j++){
        if(jachutou(palavrasecreta[j])){
           return 0;
        } 
    }
    return 1;   
}

void escolhePalavra(){
    FILE *f;
    int randomico, qtdDePalvras;
    srand(time(0));
    
    f = fopen("palavras.txt", "r");
    fscanf(f, "%d", &qtdDePalvras);
    
    
    randomico = rand() % qtdDePalvras;
    
    for(int i = 0; i <= randomico; i++){
         fscanf(f, "%s", palavrasecreta);
    }
    
    fclose(f);
}

void adicionaPalavra(){
    char confirmacao;
    string novaPalvra;
    FILE *f;
    int qtd;
    
    f = fopen("palavras.txt", "r+");
    
      if(f == 0){
        cout << "DESCULPE, BANCO DE DADOS NÃO DISPONÍVEL";
        exit(1);
      }else{
        cout << "Você deseja adicionar alguma palavra ao banco de dados?(S/N) ";
        cin >> confirmacao;
    
        if(confirmacao == "S"){
            cout << "Qual a nova palvra? \n";
            cin >> novaPalvra;
        
            fscanf(f, "%d", &qtd);
            qtd++;
        
            fseek(f, 0, SEEK_SET);
            fprintf(f, "%d", qtd);
        
            fseek(f, 0, SEEK_END);
        
            fprintf(f, "\n%s", novaPalvra);
            fclose(f);
            }
        }
}
2 respostas

Boaaa demais, obrigado por compartilhar.

solução!

Muito obrigado! Mas, poderia me ajudar com essa linha: while (!acertou() && !enforcou());? Ela não está sendo executada e finalizando o jogo.