1
resposta

[Dúvida] Acabei por tentar refazer do zero eu mesmo o código do professor e fiquei com algumas dúvidas

Eu decidi refatorar o código pois estava com algumas dúvidas quanto a lógica do jogo, então fiz até esse ponto e algumas coisas me deixaram curioso.

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

void abertura() {
    printf("*****************************************\n");
    printf("              Jogo de Forca              \n");
    printf("*****************************************\n");
}

void chuta(int* tentativas, char chutes[26]) {
    char chute;

    printf("Qual seu chute?\n");
    scanf(" %c", &chute);

    chutes[*tentativas] = chute;

    for(int i = 0; i <= *tentativas; i++) {
        printf("Chutes na posição %d vale %c\n", i, chutes[i]);
    }    

    (*tentativas)++;
}

int main() {
    abertura();

    int acertou;
    int enforcou;

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

    char chutes[26];
    int tentativas = 0;

    while(!acertou && !enforcou) {

        chuta(&tentativas, chutes);

    }

}

1. Se o array foi definido com tamanho de 26 alocações, então por que consigo dar mais de 26 tentativas? 2. O array deveria não pode aceitar valores iguais, já que o array deve ter 26 espaços que teoricamente cada espaço deveria ser únicamente pra cada letra, mas aqui ele está aceitando.

1 resposta

Boa noite, Otávio, tudo bem?

1 - Em nenhum lugar do código foi restringido a ação de chute em relação ao tamanho do vetor, como o C não realiza nenhuma verificação e nos dá liberdade, o programa vai escrever até ter um segmentation fault ou quebrar o sistema inteiro, dependendo de onde for escrita a informação. No caso a variável tentativa tem um valor sempre desincronizado em relação a variável i dentro do for.

2 - Não tem nenhuma verificação no array para verificar se o caractere já existe, nesse caso, o mais fácil é ter um for que percorre o vetor inteiro e verifica caractere por caractere e se encontrar um já existente, ativa uma flag/variável.

Recomendo muito o livro C Completo e Total, me ajudou muito durante minha graduação