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

Meu código não salva as letras certas, o que pode ser?

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

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

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

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

    chutes[tentativas] = chute;
}

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() {

    printf("Voce ja deu %d chutes\n", tentativas);

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

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

    }
    printf("\n");

}

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

int main() {

    int acertou = 0;
    int enforcou = 0;

    abertura();
    escolhepalavra();

    do {

        desenhaforca();
        chuta();

        tentativas++;

    } while (!acertou && !enforcou);

}
2 respostas
solução!

Acho que você quer dizer que ele não reconhece letras minúsculas. A palavra MELANCIA é composta apenas por letras maiúsculas e, na tabela ASCII, os caracteres para letras maiúsculas e minúsculas têm códigos diferentes. Todas os caracteres estão sendo armazenados corretamete como chutes, mas quando ele vai comparar por exemplo: M** com **m, ele retorna falso pois são diferentes, e o jogo não considera o chute como achou.

Uma maneira de contornar isso é utilizar a função toupper() da biblioteca <ctype.h> pra converter o caracter de entrada para maiúsculo antes de armazená-lo no vetor de chutes e seguir armazenando todas as palavras segredo com letras maiúsculas. O ideal seria criar uma lógica que verificasse tanto maiúsculas como minúsculas e depois considerasse o chute.

include <ctype.h>
//resto do código
chutes[tentativas] = toupper(chute);

Repare ainda que a lógica de parar o loop por enforcamento ou acerto ainda não está finalizada.

Suerte!

Link para tabela ASCII: https://web.fe.up.pt/~ee96100/projecto/Tabela%20ascii.htm

Joga o cód no Replit que vc vai ver que tem uma penca de erros.

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