Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida sobre como evitar que o usuário repita um mesmo chute

#include <stdio.h>
#include <stdlib.h>

int comparaString(char *s1, char *s2){

    int res = 1;

    for (int i = 0; i < strlen(s1); i++){
        if (s1[i] != s2[i])
        {
            res = 0;
            break;
        }
    }

    return res;
}

void enforcado(int n){

    switch (n)
    {
    case 0:
        printf("|--|\n");
        printf("|  O \n");
        printf("| /|\\ \n");
        printf("| / \\\n");
        printf("--------");
        printf("\n");
        break;
     [...]
    }

}

void colocarTracao (char *straco, int tam){

    for (int i = 0; i < tam; i++){
        straco[i] = '_';
        if (i == (tam - 1)){
            straco[i + 1] = '\0';
        }
    }

}

int chutar (char *secreta, char *jogador, char chute, int tam){

    int acertou = 0;

    for (int i = 0; i < tam; i++){

            if(secreta[i] == chute){
                jogador[i] = chute;
                acertou = 1;
                }
            }

    return acertou;
}

int main(){

    char palavraSecreta[] = "MELANCIA";
    char alfabeto[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    int tamPalavra = strlen(palavraSecreta);
    int tamAlfabeto = strlen(alfabeto);
    char *palavraJogador = malloc(sizeof(char) * tamPalavra + 1);
    char *tentativasJogador = malloc(sizeof(char) * tamAlfabeto + 1);
    colocarTracao(palavraJogador, tamPalavra);
    colocarTracao(tentativasJogador, tamAlfabeto);

    int tentativas = 6;
    char chute;
    int acertou = 0;
    int venceu = 0;

    enforcado(6);

    while(tentativas > 0){

        int repetido = 0; 

        printf("%s\n", palavraJogador);
        printf("\nQual seu palpite? (%d tentativas) ", tentativas);
        scanf("%c%*c", &chute);   
        int c = 0;
        while(1){

            for (int i = 0; i < 27; i++){
                if (tentativasJogador[i]==chute){
                    repetido = 1;
                    break;
                }
            }

            if (repetido == 0){

                tentativasJogador[c] = chute;
                c++;

                break;

            }else{


                printf("\nPalpite repetido! Novo palpite? (%d tentativas) ", tentativas);
                scanf("%c%*c", &chute);
                printf("%c\n\n", chute);

            }

        }

        acertou = chutar(palavraSecreta, palavraJogador, chute, tamPalavra);

        if (comparaString(palavraJogador, palavraSecreta) == 1){
            venceu=1;
            break;
        }

        if(acertou){
            acertou = 0;
            printf("\nVOCE ACERTOU!\n\n");
            enforcado(tentativas);
        }else{
            tentativas--;
            printf("\nVOCE ERROU!\n\n");
            enforcado(tentativas);
        }

    }

    if (venceu == 1){
        printf("\nPALAVRA SECRETA: %s", palavraSecreta);
        printf("\n\nPARABENS, VOCE VENCEU!");
    }else{
        printf("\n\nVOCE PERDEU!");
        printf("\nPALAVRA SECRETA: %s", palavraSecreta);
    }    

    return 0;
}

O código está bem grande mas o meu problema específico está por aqui:

        while(1){

            for (int i = 0; i < 27; i++){
                if (tentativasJogador[i]==chute){
                    repetido = 1;
                    break;
                }
            }

            if (repetido == 0){

                tentativasJogador[c] = chute;
                c++;

                break;

            }else{
                printf("\nPalpite repetido! Novo palpite? (%d tentativas) ", tentativas);
                scanf("%c%*c", &chute);
                printf("%c\n\n", chute);
            }
        }

Não sei exatamente qual está sendo o meu erro!

1 resposta
solução!

Já resolvi

        while(1){
            repetido = 0;

            if (c == 0){
                tentativasJogador[0] = chute;
                c++;
                break;
            }

            for (int i = 0; i < c; i++){

                if (tentativasJogador[i] == chute){
                    printf("\nRepetido! Novo chute: ");
                    scanf("%c%*c", &chute);
                    repetido = 1;
                }

            }

            if (repetido == 0){ 
                tentativasJogador[c] = chute;
                c++;
                break;
            }

        }