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

[Dúvida] Caso a pessoa coloque uma letra minúscula

Minha dúvida é, rodei o código e coloquei a letra minúscula, ela não foi identificada pois a array da palavra secreta está totalmente preenchida por letras minúsculas, não sei se isso será resolvido em algum vídeo mais para frente, mas tem alguma função, no c, (igual a existente no python), para contornar esse problema?

Caso esse problema seja resolvido em vídeos posteriores, peço desculpas.

1 resposta
solução!

Oii, Claudio! Como vai?

Você trouxe uma questão importante! Seu código está comparando letras exatamente como foram digitadas, então se a palavrasecreta está em maiúsculas e a pessoa digita uma letra minúscula, a comparação não vai funcionar.

O que fazer?Use a função toupper() da biblioteca <ctype.h> para transformar o chute em maiúscula antes de comparar. Assim, tanto faz se a pessoa digitar a ou A, por exemplo.

Eu fiz assim no meu projeto, você pode ter uma ideia pra aplicar no seu:

#include <stdio.h>
#include <string.h>
#include <ctype.h> // para usar toupper()

int enforcou = 0;
int acertou = 0;

int letra_existe(char letra, char* palavra) {
    for(int j = 0; j < strlen(palavra); j++) {
        if(palavra[j] == letra) {
            return 1;
        }
    }
    return 0;
}

int ganhou(char* palavra, char* chutes, int tentativas) {
    for(int i = 0; i < strlen(palavra); i++) {
        int achou = 0;
        for(int j = 0; j < tentativas; j++) {
            if(chutes[j] == palavra[i]) {
                achou = 1;
                break;
            }
        }
        if(!achou) return 0;
    }
    return 1;
}

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

    char chutes[26];
    int tentativas = 0;
    int erros = 0;

    do {
        for(int i = 0; i < strlen(palavrasecreta); i++) {
            int achou = 0;
            for(int j = 0; j < tentativas; j++) {
                if(chutes[j] == palavrasecreta[i]) {
                    achou = 1;
                    break;
                }
            }
            if(achou) {
                printf("%c ", palavrasecreta[i]);
            } else {
                printf("_ ");
            }
        }
        printf("\n");

        char chute;
        printf("Qual letra? ");
        scanf(" %c", &chute);
        chute = toupper(chute); // transforma em maiúscula

        chutes[tentativas] = chute;
        tentativas++;

        if(!letra_existe(chute, palavrasecreta)) {
            erros++;
        }

        acertou = ganhou(palavrasecreta, chutes, tentativas);
        enforcou = erros >= 6;

    } while (!acertou && !enforcou);

    if(acertou) {
        printf("Parabens! Voce ganhou :)\n");
    } else {
        printf("Voce perdeu! A palavra era %s\n", palavrasecreta);
    }

    return 0;
}

O que esse trecho faz:

chute = toupper(chute);

Transforma a letra digitada para maiúscula antes de guardar no array chutes.Assim, você padroniza a entrada e evita problemas de comparação com a palavra "MELANCIA".

Lembre de salvar e gerar o arquivo executável com:

gcc forca.c -o forca

Assim as mudanças serão aplicadas.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!