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!