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

O programa nao roda as palavras depois do primeiro chute

Criei um arquivo palavras.txt e funcionou porque sempre aparece palavras de tamanho diferentes mas quando eu tento colocar a primeira letra, o programa simplesmente fecha, alguem saberia me ajudar com essa ?

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

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

void baner(){
    printf("****************\n");
    printf(" Jogo de Forca *\n");
    printf("****************\n\n");
}
void chuta(){
    char chute;
        scanf(" %c",&chute);        
        chutes[tentativas] = chute;
        tentativas++;
}
int jachutou(char letra){
    int achou = 0;            

    for(int j = 0;j < tentativas; j++){                      
        if(chutes[j] == letra){
            achou = 1;
            break;
        }
    }
    return achou;
}
void desenhaforca( ){
    for(int i = 0; i < strlen(palavrasecreta); i++)   {           

        int achou = jachutou(palavrasecreta[i]);

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

    FILE* f;

    f = fopen("palavras.txt","r");
    if( f == 0){
        printf("Banco de dados nao disponivel!\n\n");
        exit(1);
    }

    int qpalavras;
    fscanf(f, "%d", &qpalavras);

    srand(time(0));
    int rando = rand() % qpalavras;

    for(int i = 0;i <= rando; 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; i < tentativas; 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 >= 6;
}

int main(void){

    baner();
    escolhepalavra();
    acertou();


    do{

        desenhaforca( );
        chuta();

    }while (!acertou && !enforcou());    // "!" negacao  (1)  

}
1 resposta
solução!

Você esqueceu de colocar o parenteses na função "acertou" dentro da condição do while.

do{

        desenhaforca( );
        chuta();

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

tente agora:

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

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

void baner(){
    printf("****************\n");
    printf(" Jogo de Forca *\n");
    printf("****************\n\n");
}
void chuta(){
    char chute;
        scanf(" %c",&chute);        
        chutes[tentativas] = chute;
        tentativas++;
}
int jachutou(char letra){
    int achou = 0;            

    for(int j = 0;j < tentativas; j++){                      
        if(chutes[j] == letra){
            achou = 1;
            break;
        }
    }
    return achou;
}
void desenhaforca( ){
    for(int i = 0; i < strlen(palavrasecreta); i++)   {           

        int achou = jachutou(palavrasecreta[i]);

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

    FILE* f;

    f = fopen("palavras.txt","r");
    if( f == 0){
        printf("Banco de dados nao disponivel!\n\n");
        exit(1);
    }

    int qpalavras;
    fscanf(f, "%d", &qpalavras);

    srand(time(0));
    int rando = rand() % qpalavras;

    for(int i = 0;i <= rando; 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; i < tentativas; 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 >= 6;
}

int main(void){

    baner();
    escolhepalavra();
    acertou();


    do{

        desenhaforca( );
        chuta();

    }while (!acertou() && !enforcou());    // "!" negacao  (1)  

}

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