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

Por que a letra que acertei não está aparecendo?

Estou com um problema no jogo da forca, fiz o código seguindo a aula e quando eu chuto uma letra e acerto, ela não aparece. Copiei o código do próprio professor e a mesma coisa está acontecendo. Não consigo ver onde está o erro, alguém pode me ajudar?

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

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

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

void chuta() {
    char chute;
    printf("Qual letra? ");
    scanf(" %c", &chute);

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

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

    return achou;
}

void desenhaforca() {

    printf("Voce ja deu %d chutes\n", chutesdados);
    int i;
    for(i = 0; i < strlen(palavrasecreta); i++) {

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

    }
    printf("\n");

}

void escolhepalavra() {
    sprintf(palavrasecreta, "MELANCIA");
}



int enforcou() { 
int i;
int erros = 0;
int existe = 0;

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

int j;
for (j=0; strlen(palavrasecreta); j++) {    // a letra que ele chutou é igual a letra na palavra secreta? se sim, existe = 1 pq eu achei
if (chutes[i] == palavrasecreta[j]) {
    existe = 1;
    break; //quebra o loop
}
}
 if (!existe) erros++;  //errou a letra, cai aqui e incrementa erros
}
 return erros >= 5;
}



int main() {

    int acertou = 0;


    abertura();
    escolhepalavra();

    do {

        desenhaforca();
        chuta();

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

}
3 respostas

Também estou com problema nessa linha: da o seguinte erro:

"59 5 conflicting types for 'jachutou' 59 1 [Note] an argument type that has a default promotion can't match an empty parameter name list declaration [Note] previous implicit declaration of 'jachutou' was here "

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

O código está correto.

Lembre-se que letras MAIÚSCULAS são diferentes de letras minúsculas.

solução!

Não consegui simular o erro de GUSTAVO.

Segue o código:

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

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

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

void chuta() {
    char chute;
    printf("Qual letra? ");
    scanf(" %c", &chute);
    chutes[chutesdados] = chute;
    chutesdados++;
}

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

void desenhaforca() {
    printf("Voce ja deu %d chutes\n", chutesdados);
    int i;
    for(i = 0; i < strlen(palavrasecreta); i++) {
        if(jachutou(palavrasecreta[i])) {
            printf("%c ", palavrasecreta[i]);
        } else {
            printf("_ ");
        }
    }
    printf("\n");

}

void escolhepalavra() {
    sprintf(palavrasecreta, "MELANCIA");
}



int enforcou() { 
    int i;
    int erros = 0;
    int existe = 0;
    for (i=0; i< chutesdados; i++) { 
         int existe = 0;
          int j;
          for (j=0; strlen(palavrasecreta); j++) {    // a letra que ele chutou é igual a letra na palavra secreta? se sim, existe = 1 pq eu achei
              if (chutes[i] == palavrasecreta[j]) {
                      existe = 1;
                      break; //quebra o loop
              }
          }
          if (!existe) erros++;  //errou a letra, cai aqui e incrementa erros
    }
     return erros >= 5;
}


int main(int argc, char *argv[])
{
    int acertou = 0;
    abertura();
    escolhepalavra();
    do {
        desenhaforca();
        chuta();
    } while (!acertou && !enforcou());
    return 0;
}