1
resposta

Erro ao compilar o código

Está dando erro na parte de for (int i = 0; i < strlen (palavrasecreta); i++) uso o vscode

#include <stdio.h>
#include <string.h>
#include <locale.h>
int main() {
    char palavrasecreta[20];
    sprintf(palavrasecreta, "MELANCIA");

    int acertou = 0;
    int enforcou = 0;

    char chutes[26];
    int tentativas = 0;

    do {
        // Exibe a palavra com as letras já acertadas
        for (int i = 0; i < strlen (palavrasecreta); i++) {
            int achou = 0;

            for (int j = 0; j < tentativas; j++) {
                if (chutes[j] == palavrasecreta[i]) {
                    achou = 1;
                    break;
                }
            }

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

        // Solicita um chute do jogador
        char chute;
        printf("Digite uma letra: ");
        scanf(" %c", &chute);

        // Armazena o chute no array
        chutes[tentativas] = chute;
        tentativas++;

        // Aqui você pode implementar a lógica para verificar se acertou ou se enforcou

    } while (!acertou && !enforcou);

    return 0;
}
1 resposta

Olá, Natalia! Tudo bem?

Analisando e testando o seu código não identifiquei nenhum problema na estrutura de repetição que você comentou, além de que, o seu código rodou sem nenhum problema, apenas faltando a condição de parada ao acertar completamente o nome da fruta.

No código abaixo adicionei um trecho que verifica e aplica uma condição de parada quando o nome da fruta for completo:

#include <stdio.h>
#include <string.h>
#include <locale.h>
int main() {
    char palavrasecreta[20];
    sprintf(palavrasecreta, "MELANCIA");

    int acertou = 0;
    int enforcou = 0;

    char chutes[26];
    int tentativas = 0;

    do {
        int erros = 0; // Conta letras não descobertas
    
        // Exibe a palavra com os acertos
        for (int i = 0; i < strlen(palavrasecreta); i++) {
            int achou = 0;
    
            for (int j = 0; j < tentativas; j++) {
                if (chutes[j] == palavrasecreta[i]) {
                    achou = 1;
                    break;
                }
            }
    
            if (achou) {
                printf("%c ", palavrasecreta[i]);
            } else {
                printf("_ ");
                erros++;
            }
        }
        printf("\n");
    
        // Se não houver erros, o jogador acertou toda a palavra
        if (erros == 0) {
            acertou = 1;
            break;
        }
    
        // Solicita um chute do jogador
        char chute;
        printf("Digite uma letra: ");
        scanf(" %c", &chute);
    
        // Armazena o chute no array
        chutes[tentativas] = chute;
        tentativas++;
    
        // Define limite para perder o jogo
        if (tentativas >= 20) {
            enforcou = 1;
        }
    
    } while (!acertou && !enforcou);
    

    return 0;
}

Espero ter ajuda e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!