3
respostas

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;
}
3 respostas

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!

Olá, tudo bem? fica dando erro ao compilar. aparecendo isso "c:\Users\Natalia\Desktop\jogo.c\main.c: In function 'main': c:\Users\Natalia\Desktop\jogo.c\main.c:18:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare] for (int i = 0; i < strlen (palavrasecreta); i++) {" e isso "c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot open output file c:\Users\Natalia\Desktop\jogo.c\output\main.exe: Permission denied collect2.exe: error: ld returned 1 exit status"

  • The terminal process "C:\MinGW\bin\gcc.exe '-Wall', '-Wextra', '-g3', 'c:\Users\Natalia\Desktop\jogo.c\main.c', '-o', 'c:\Users\Natalia\Desktop\jogo.c\output\main.exe'" terminated with exit code: 1.
  • Terminal will be reused by tasks, press any key to close it.

Oi, Natalia! Peço perdão pela demora em retornar.

Sobre sua última dúvida, o primeiro erro ocorre porque a função strlen() retorna um valor unsigned, enquanto i é um int. Isso gera um warning de comparação entre tipos diferentes. Resolva isso declarando i como size_t, que é o tipo correto para armazenar o retorno de strlen():

for (size_t i = 0; i < strlen(palavrasecreta); i++) {

O segundo erro indica problema de permissão ao gerar o arquivo executável. Algumas possíveis soluções:

  1. Feche qualquer terminal ou editor que possa estar usando main.exe e tente compilar novamente.
  2. Verifique se a pasta output tem permissão de escrita. Se necessário, execute o terminal como administrador.
  3. Experimente compilar com um nome de saída diferente, como:
gcc main.c -o jogo.exe

Se o erro persistir, tente excluir manualmente main.exe antes de recompilar.

Fico à disposição.