Antes de fazer a solução dos videos eu tentei fazer sozinho, utilizando algumas lógicas que vi no curso de Python, bom, eu utilizei um array (palavrasAcertadas) para receber a letra que está no indice de outro array (palavrasecreta) quando percorrido pelo for, ele só recebe a letra quando a condição de comparação if dele com o chute é verdadeira, quando isso acontece eu quebro o loop for e entro em outro loop que compara os dois arrays de chars índice a índice passando por um if e um else para quando for verdadeira imprimir o char e quando não for imprimir o underscore.
Até ai tudo bem, só que quando o tamanho de palavrasAcertadas fica igual ao de palavrasecreta, lógicamente o jogo acaba, pois o jogador já descobriu todos os números. O problema foi que o tamanho do array palavrasAcertadas sempre fica maior do que o array palavrasecreta no final do código.
Cheguei a fazer uns testes imprimindo o tamanho do array palavrasAcertadas a cada passagem e vi que quando eu acerto uma letra, o strlen() dele retorna o valor 3, quando eu acerto as demais, ele sempre fica estático com o valor 4, e quando completo a palavra ele retorna o valor 9. Eu não armazenei o valor dele em uma variavel, pela minha lógica o valor teria de ser atualizado sempre quando passasse pela função strlen().
Minhas duvidas são:
Porque esses valores específicos na hora que acrescento chars a esse array?
Existe uma forma de colocar o '\0' no final? Ele resolveria?
A função strlen() está sendo utilizada de forma correta a favor da minha lógica?
Que erros cometi ao utilizar essa solução para o problema?
Bom, vou deixar o código abaixo, to curtindo muito o curso.
Estou no aguardo, abraço!
#include <stdio.h>
#include <string.h>
int main(){
printf("***************************\n\n");
printf("Bem vindo ao Jogo da Forca!\n\n");
printf("***************************\n\n");
char palavrasecreta[20];
sprintf(palavrasecreta, "MELANCIA");
printf(" _______\n");
printf(" |/ |\n");
printf(" | (_)\n");
printf(" | \\|/\n");
printf(" | |\n");
printf(" | / \\ \n");
printf(" | \n");
printf("_|___\n\n\n\n");
printf("A palavra possui %d letras! Voce sabe qual eh a palavra?\n\n", strlen(palavrasecreta));
char palavrasAcertadas[20];
int acertou = 0;
int enforcou = 0;
int i;
for(i = 0; i < strlen(palavrasecreta); i++){
printf("_ ");
}
printf("\n\n");
do{
//comecar o jogo!!
printf("Qual o seu chute?\n\n");
char chute;
scanf("%c", &chute);
for(i = 0; i < strlen(palavrasecreta); i++){
if(chute == palavrasecreta[i]){
printf("A posicao %d tem essa letra \n", i);
palavrasAcertadas[i] = palavrasecreta[i];
}
}
for(i = 0; i < strlen(palavrasecreta); i++){
if(palavrasecreta[i] == palavrasAcertadas[i]){
printf("%c ",palavrasAcertadas[i]);
}else{
printf("_ ");
}
}
printf("\n\n");
printf("O tamanho da variavel palavrasAcertadas eh %d",strlen(palavrasAcertadas));
printf("\n\n");
if(strlen(palavrasAcertadas) > strlen(palavrasecreta)){
break;
}
}while(!acertou && !enforcou);
printf("Fim de JOGO!");
}