2
respostas

Por que o parametro (chutes) da função chuta funcionou na função main?

No meu código o parametro (chutes) da função chuta, acaba recebendo o valor que colocamos com o input do teclado, mas o chute que estar na segunda função for() recebe um número aleátorio...Entedi isso a pois a explicação do professor mudando o (tentativas) para o escopo para a função main(), mas ele não faz o mesmo com o parametro (chutes)!

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

void abertura() { printf("*****************\n"); printf(" JOGO DA FORCA *\n"); printf("******************\n\n");

}

void chuta(char chutes[26], int tentativas) { char chute; scanf_s(" %c", &chute);

chutes[tentativas] = chute;
printf("Chutes da  funsão: %c \n", chutes[0]);

}

int main() { char palavrasecreta[20]; sprintf(palavrasecreta, "OVO");

int acertou = 0;
int enforcou = 0;

int chutes[26];
int tentativas = 0;

abertura();
do {
    
    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");
    
    chuta(chutes, tentativas);
    tentativas++;
    
} while (!acertou && !enforcou);

}

2 respostas

Consegui resolver, eu tinha declarado a Array chutes da função main, errada! Mas não entendi por que variável (tentativa) da função chuta precisou ser colocada na função main, e a array (chutes) funciona de uma maneira diferente.

Oi João! Tudo bem?

No seu código, a variável tentativas precisa ser manipulada dentro da função main porque ela controla o número de tentativas feitas pelo jogador.

Então, quando você passa tentativas como um parâmetro para a função chuta, você está passando uma cópia do valor atual de tentativas, e não a própria variável. Portanto, qualquer modificação feita em tentativas dentro da função chuta não afeta a variável tentativas na função main.

Por outro lado, o array chutes é passado por referência para a função chuta. Isso significa que qualquer modificação feita no array chutes dentro da função chuta afeta diretamente o array chutes na função main. Em C, arrays são sempre passados por referência, o que permite que a função chuta modifique o conteúdo do array chutes diretamente.

Vamos ver um exemplo prático para ilustrar isso:

#include <stdio.h>

void modificaArray(int arr[], int tamanho) {
    for (int i = 0; i < tamanho; i++) {
        arr[i] = i * 2; // Modificando o array diretamente
    }
}

void modificaVariavel(int var) {
    var = 10; // Modificando apenas a cópia da variável
}

int main() {
    int array[5] = {0, 0, 0, 0, 0};
    int variavel = 5;

    modificaArray(array, 5);
    modificaVariavel(variavel);

    printf("Array após modificaArray: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");

    printf("Variável após modificaVariavel: %d\n", variavel);

    return 0;
}

Saída esperada:

Array após modificaArray: 0 2 4 6 8 
Variável após modificaVariavel: 5

No exemplo acima, a função modificaArray altera diretamente o conteúdo do array passado, enquanto a função modificaVariavel altera apenas uma cópia da variável, deixando a variável original inalterada.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.