Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NullReference no AnalisadorSemantico.obterNomeParametro a partir de uma linha de portugol que usa "escreva" e uma função como parâmetro #795

Closed
gustavodort opened this issue May 9, 2020 · 5 comments
Labels
bug Indica que ocorreu um erro inesperado no programa/código
Milestone

Comments

@gustavodort
Copy link

Descrição do Problema:
Um aluno meu fez esse código e deu um nullRef no método obterNomeParametro da classe AnalisadorSemantico, linha 604. Isso acontece a partir da existência da linha 17 do código.

Mensagem de Erro (se houver):
Não consegui acessar o texto do erro, portanto estou enviando um screenshot.
image

Captura de Tela / Arquivo.por:
Tive que zipar por restrições de extensão:
erro-ex7.zip

Especificações do sistema:

DxDiag.txt

@AdsonEsteves
Copy link
Member

@gustavodort
Obrigado, vamos tratar esse erro nas próximas versões.
Isso ocorreu pois a função Ex7 não retorna nenhum valor para o escreva quando chamada
image

@AdsonEsteves AdsonEsteves added the bug Indica que ocorreu um erro inesperado no programa/código label May 11, 2020
@gustavodort
Copy link
Author

gustavodort commented May 11, 2020 via email

@AlissonSteffens
Copy link
Member

@gustavodort ela escreve no console, não retorna. São coisas diferentes.

Quando você escreve algo no console, esse valor não é retornado para a chamada de função, ele é apenas enviado para o componente renderizador de texto.

É possível escrever e retornar "ao mesmo tempo", para isso primeiro escreva e depois retorne (já que todo código após o retorno de função é ignorado.

funcao real Ex7 (real salario, inteiro vendas){
  escreva(salario+vendas*0.15)
  retorne (salario+vendas*0.15)
}

espero ter ajudado 🙂

@AlissonSteffens
Copy link
Member

AlissonSteffens commented May 11, 2020

obs: @gustavodort já que você já escreve na função, não há poque escrever na início também. Senão ficaria escreva(escreva(valor)). Então, se quiser economizar trabalho, pode fazer assim também:

programa
{
    funcao inicio ()
    {
        cadeia nome
        escreva("Digite seu nome: ")
        leia(nome)
        
        real salario
        escreva("\nDigite seu salário fixo: ")
        leia (salario)
        
        inteiro vendas
        escreva("\nDigite as vendas efetuadas: ")
        leia (vendas)

        escreva("\nSeu salário é de: R$")
        Ex7(salario,vendas)

    }
    
    funcao Ex7(real salario, inteiro vendas)
    {
        escreva (salario+vendas*0.15)
    }
}

@gustavodort
Copy link
Author

Perdão, você tem toda razão!
Eu pensei que a correção que você tinha me enviado era o que meu aluno tinha feito.

@AdsonEsteves AdsonEsteves added this to the 2.7.5 milestone Nov 17, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Indica que ocorreu um erro inesperado no programa/código
Projects
None yet
Development

No branches or pull requests

3 participants