1
resposta

Ao dar o chute certo não aparece a letra e sim os tracejados, revisei o código e nada :/

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

int main (){

        char palavrasecreta[20];    

        sprintf(palavrasecreta,"MELANCIA");

        int acertou = 0;
        int enforcou = 0;

        char chutes[26];
        int tentativas = 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;
            scanf(" %c", &chute);

        } while(!acertou && !enforcou);

}
1 resposta

Olá, Walef!

Pelo código que você compartilhou, parece que você está tentando implementar um jogo de forca em C. No entanto, você está enfrentando um problema em que, ao dar o chute certo, não aparece a letra correta, apenas os tracejados.

Pelo que pude analisar, o problema está na lógica de exibição das letras corretas. No trecho de código que você compartilhou, você está percorrendo a palavra secreta e verificando se cada letra já foi chutada pelo jogador. Se a letra já foi chutada, você exibe a letra correta. Caso contrário, você exibe um underscore.

No entanto, parece que você não está atualizando corretamente a variável achou quando uma letra é encontrada nos chutes do jogador. Isso pode estar fazendo com que todas as letras sejam exibidas como underscore.

Uma possível solução para esse problema é adicionar um break no momento em que uma letra é encontrada nos chutes do jogador. Dessa forma, você interrompe o loop interno e evita que o underscore seja exibido desnecessariamente.

Aqui está o trecho de código atualizado:

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; // Adicionado o break aqui
            }
        }
        if (achou) {
            printf("%c ", palavrasecreta[i]);
        } else {
            printf("_ ");
        }
    }
    printf("\n");

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

    chutes[tentativas] = chute;
    tentativas++;
} while (!acertou && !enforcou);

Com essa modificação, o código deve exibir corretamente as letras chutadas pelo jogador em vez de exibir apenas os tracejados.

Espero ter ajudado e bons estudos!