1
resposta

quando digito um chute certo o código imprime a posição desse chute porém imprime todas as letras após ele por exemplo quando chuto 'A' ele imprime _ _ _ANCIA ao invés de _ _ _A_ _ _ A

#include <stdio.h>

#include <string.h>

int main(){ char ps[20]; char cht[26]; char cfor; int achou=0, tnt=0; int f, c; int acertou=0, enforcou=0;

strcpy(ps, "MELANCIA");

do{ for(f=0;f<strlen(ps);f++){ printf("Estou vendo a letra secreta %d = %c\n", f, ps[f]); for(c=0;c<tnt;c++){ printf("-> Chute %d = %c\n", c, cht[c]); if(cht[c] == ps[f]){ printf("--> chute correto!\n"); achou = 1; break; } }

if(achou){ 
printf("%c ", ps[f]);    
}
else{        
printf("_ ");
}
}
printf("\n");

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

cht[tnt] = cfor;
tnt++;

}while(!acertou && !enforcou);

}

1 resposta

Olá José!

Pelo que entendi, você está com um problema no código que imprime a posição correta do chute, mas também imprime todas as letras após ela. Para resolver isso, é necessário fazer algumas alterações no código.

Primeiramente, vamos adicionar um array chamado chutes para armazenar todas as letras que o usuário já chutou. Também vamos criar uma variável tentativas para contar o número de chutes dados. Essas alterações devem ser feitas antes do loop do-while:

char chutes[26];
int tentativas = 0;

Em seguida, logo após capturar a letra no scanf(), vamos armazená-la no array de chutes e incrementar o número de tentativas:

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

chutes[tentativas] = cfor;
tentativas++;

Agora, vamos modificar o loop que exibe a palavra escondida. Para cada letra da palavra secreta, vamos percorrer o array de chutes e verificar se a letra já foi chutada. Se sim, imprimimos a letra, caso contrário, imprimimos um underscore. Para isso, vamos adicionar um novo loop dentro do loop existente:

for(f = 0; f < strlen(ps); f++){
    printf("Estou vendo a letra secreta %d = %c\n", f, ps[f]);	
    
    int achou = 0;
    
    for(c = 0; c < tnt; c++){
        printf("-> Chute %d = %c\n", c, cht[c]);	
        
        if(cht[c] == ps[f]){
            printf("--> chute correto!\n");	
            achou = 1;
            break;	
        }
    }
    
    if(achou){ 
        printf("%c ", ps[f]);	
    }
    else{		
        printf("_ ");
    }
}

Dessa forma, o código irá verificar se a letra atual já foi chutada e imprimir a letra ou um underscore, de acordo com o resultado.

Espero que isso resolva o seu problema! Se tiver mais alguma dúvida, é só me dizer. Bons estudos!