Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

[Dúvida] C: Avançando na linguagem: Aula 4 - Contexto das variáveis

Não entendi como o programa buscou a letra A, se não é atribuído nenhum valor a variável tentativas porque o elemento atribuído a variável chutes[26] na função chuta() é passado a variável chutes[26] na função main() ? Sendo que as variáveis são diferentes mesmo com nomes iguais.

6 respostas

Oi, Gabriel! Tudo bem?

Eu não tenho acesso ao conteúdo desse curso, mas estudo a linguagem C e talvez consiga te ajudar.

Se possível, poderia disponibilizar aqui o código em questão e o enunciado/orientação do que o programa/função deve gerar como resultado?

Bom fim de semana e bons estudos!

O programa busca na palavra secreta a letra que o usuário chutar. Está funcionando perfeitamente, o que não consigo entender é como o programa buscou a letra, sendo que a variável dentro da função main() é diferente da variável na função chuta().

Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Oi, Gabriel!

Não sei se consegui entender muito bem a sua pergunta, proponho usarmos os nomes das variáveis e as linhas do código para afinar nossa comunicação, ok?

Você está se referindo à variável tentativa, na linha 16, que define a posição da letra do chute ser diferente da variável j, que é a posição da letra do chute na linha 37?

O motivo é porque em C não existe o tipo de variável string e para trabalhar com cadeia de caracteres nesta linguagem usamos os arrays, que nessa linguagem funcionam como ponteiros.

Quando você passa o array chutes como parâmetro para a função chuta na linha 50, o que você está fazendo na verdade é passar um ponteiro para o primeiro elemento do array chutes.

Por funcionar com um ponteiro, você consegue acessar a string chutes na função chuta e atribuir um valor a uma determinada posição de chutes na linha 16. Então na primeira vez que você roda o seu programa, como a variável tentativa assume o valor 0 e você passou o array (string) chutes e a variável tentativa para a sua função chuta, essa função, ao receber chutes e a variável tentativa com valor 0, armazena a letra escolhida pelo usuário na posição 0 de chutes.

Ex: Na definição das variáveis da sua main(), chutes[26] é uma string sem nada dentro, mas depois que a função chuta é chamada na primeira vez e o chute do usuário é B, na linha 16 o valor (B) é armazenado na posição 0 da string chutes, então a string passa a ser:

B _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Segue abaixo uma ideia de como seria:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Como falamos antes, não existe string em C, então as strings são arrays de caracteres, que por sua vez, para essa linguagem, funcionam como ponteiros. Por funcionar como ponteiro, todas as atribuições de valores em uma determinada posição que você fizer na função chuta, também serão "enxergadas" pela main(), pois quando você modifica o array chutes dentro da função chuta(), você está alterando o mesmo bloco de memória que o array declarado na sua main() está usando.

Sendo assim, quando você modifica o array chutes dentro da função chuta(), essas alterações são refletidas no array chutes na função main(). Isso acontece porque a função chuta() recebe o endereço de memória do array chutes, e qualquer alteração feita nesse endereço vai refletir globalmente e não apenas dentro de uma função específica.

(Esse assunto pode ser melhor compreendido estudando sobre ponteiros e arrays em C)

No seu programa a função chuta() está recebendo o array chutes como um parâmetro e, ao adicionar a letra na posição tentativa, está atualizando o array original que foi passado para ela.

Resumindo, a variável chutes dentro da função main() e a variável chutes dentro da função chuta() estão referenciando o mesmo bloco de memória. Por isso, as alterações feitas em uma função refletem na outra.

Se não for isso, me sinaliza os nomes das variáveis e as linhas, por favor. Se preferir, também estou disponível no Discord da Alura como Thati Moreira para entrar em chamada de voz, onde podemos compartilhar tela, estudar algum assunto específico, etc.

(uma dica: posta o código aqui no texto copiando ele do seu programa e colando aqui na caixa de texto dentro dos acentos que vão aparecer na tela depois que você clicar na ferramenta </> disponível na barra de edição. Assim, quem for analisar pode copiar o códido e colar em editor de texto/IDE de sua preferência. Quando se cola o print, é preciso digitar todo o código. Às vezes até a forma de escrever o código, indentação que cada um usa, dificulta a compreensão e quando se pode copiar, cada um faz seus ajustes)

. . .

Se esta resposta te ajudou, favor marcar como solucionado ✓

E uma pergunta...

Após acertar a palavra o seu programa está com o comportamento esperado? Aqui ele não encerra, continua pedindo para chutar outra letra.

. . .

Se esta resposta te ajudou, favor marcar como solucionado ✓

Olá, Thatiana!

Por em quanto, após acertar a palavra o meu programa ainda não encerra o loop, por não ter um comando de parada do loop. Obrigado, você me ajudou muito a solucionar minha dúvida!

Obrigado pela dica, na próxima farei uso da ferramenta para uma melhor análise do código.

Imagina!

Quando precisar, é só chamar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software