1
resposta

Imprimindo _ infinito.

Meu código está igual ao da aula, porém quando rodo ele pra testar ele fica imprimindo _ pra sempre.

#include <stdio.h>

#include <string.h> int main(){

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

int acertou = 0;
int enforcou = 0;
int tentativas = 0;
char chutes[26];

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

        int achou = 0;

        for(int j = 0; j < tentativas; j++){
            printf(" → chute %d = %c", j, chutes[i]);
            if(chutes[j] == palavrasecreta[i]){
                printf("chute correto!\n");
                achou = 1;
                break;
            }
        }
        if(achou){
            printf("%c ", palavrasecreta[i]);
        }
        else{
            printf("_ ");
        }
    }
}
while(!acertou && !enforcou);

}

1 resposta

Olá Christian, tudo bem com você?

Dentro do seu programa não está sendo armazenado quais os chutes feitos por quem está jogando, assim, o vetor de chutes chutes[26] está vazio e quando é feita a verificação se o chute já foi feito, o programa olha para um vetor vazio e diz que não acertou a letra. Outro ponto, é que na lógica só está sendo tratado o acerto. Quando a pessoa erra o chute, não está sendo contabilizado para enforcar e perder o jogo.

Possível solução para o chute e enforcamento:

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

chutes[tentativas] = chute;
tentativas++;

Adicionar esse trecho de código dentro do loop do-while, para sempre ao início de uma iteração ser pedido um chute, e que ele seja contabilizado dentro do vetor de chutes. Ao final disso, aumenta o número de tentativas para garantir que a pessoa que está jogando não passe das tentativas máximas. Para enforcar, podemos adicionar no loop o seguinte trecho de código:

No inicio do código, declarar a variável int erros = 0;

caso a pessoas não acerte, acrescer a variável erros:

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

E ao final, verificar a quantidade de erros da pessoa:

if(erros == 5){
    enforcou = 1;
}

Assim, quando a pessoa fizer 5 chutes errados, ela será enforcada e o jogo acaba.

Essas sugestões podem ser alteradas e você pode fazer do seu jeito também, apenas tentei dar uma luz do que pode ser feito e te desafio a implementar e mandar pra nós aqui no fórum a sua solução!

Fico à disposição em caso de dúvidas.

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!