6
respostas

[Dúvida] O resultado do if else não está correto

Independente do resultado do imc, o if else traz apenas o retorno de else :(

let inputNome = document.getElementById("nome");
let inputPeso = document.getElementById("peso");
let inputAltura = document.getElementById("altura");

let imcTotal = document.getElementById("imcTotal")

function calculo(){
    let nome = inputNome.value;
    let kg = inputPeso.value;
    let alt = inputAltura.value;

    imcTotal.innerHTML = `<p>${nome + ', de acordo com seu peso e altura, o IMC está em: ' + imc(kg, alt) + ' e o resultado foi: ' + resultado(imc)}</p>`
}

function imc(n1, n2){
    let kg = inputPeso.value;
    let alt = inputAltura.value;
    const massaCorpo = (kg / (alt * alt));
    const total = massaCorpo.toFixed();
    return total;
}

function resultado(imc){

    if (imc <= 18){
        return 'abaixo do peso. É importante verificar se você está com déficit de massa magra, por isso, busque pela ajuda de um profissional.'
    }
    else if (imc >= 19 || imc <= 24){
        return 'peso normal. Continue cuidando do seu peso e fique em dia com a sua saúde.'
    }
    else if (imc >= 25 || imc <= 29){
        return 'sobrepeso. Fique atento pois o excesso de peso pode trazer malefícios à sua saúde.'
    }
    else (imc >= 30);{
        return 'obesidade. Busque apoio médico para verificar se sua saúde está sendo afetada pelo excesso de peso.'
    }
}
6 respostas

Olá Karine, tudo bem ?

Ao analisarmos seu código acredito que o erro pode está acontecendo na função resultado(imc), você está usando o operador lógico OU (||) para verificar os intervalos de IMC, mas o recomendado é utilizar o operador lógico E (&&). Por exemplo:

else if (imc >= 19 && imc <= 24){
        return 'peso normal. Continue cuidando do seu peso e fique em dia com a sua saúde.'
    }

Isso vai garantir que o IMC esteja entre 19 e 24 para retornar essa mensagem. Do modo que foi realizado por ti utilizando o OU, qualquer imc maior ou igual a 19 ou menor ou igual a 24 vai entrar nesse caso, e isso inclui todos os valores possíveis de imc. Por isso, o seu código sempre retorna else já que o outro else if também é validado.

Além disso, não é necessário colocar um ponto e vírgula depois do else (imc >= 30);. Isso pode causar um erro de sintaxe.

Mas caso o erro persista peço que me envie tbm o seu arquivo HTML, para que eu consiga lhe auxiliar de forma mais assertiva.

Espero ter ajudado!

Sucesso

Abraços e até mais!

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

Olá Victor, agradeço o breve retorno, mas mesmo alterando o operador não funcionou :(

Segue o HTML:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" href="reset.css">
    <link rel="stylesheet" type="text/css" href="style.css">
    <title>Calculadora de IMC</title>
</head>
<body>

    <form action="">

        <fieldset>
            <h1>Calculadora de IMC</h1>

            <p>Complete com as suas informações abaixo para calcular seu IMC:</p>

            <label for="nome" class="campos">Nome:</label>
            <input type="text"  id="nome" required class="campos">

            <label for="peso" class="campos">Peso:</label>
            <input type="number" id="peso" required class="campos" placeholder="Ex: 73">

            <label for="altura" class="campos">Altura:</label>
            <input type="number" id="altura" required class="campos" placeholder="Ex: 1.65">

            <input type="button" onclick="calculo()" class="botao" value="Calcular">

            <div id="imcTotal">

            </div>

        </fieldset>




    </form>

    <script src="script.js"> </script>

</body>
</html>

Oi Karine, tudo bem?

Muito obrigado, por me enviar o HTML dessa forma consigo lhe auxiliar melhor, o que acontece é que provavelmente você está utilizando de cm no input de altura para fazer o cálculo mas o placeholder assim como o cálculo pede em decimal, acredito que isso pode estar lhe confundido, pois aqui não obtive esse erro caso coloque por exemplo, 1.70, mas caso eu coloque 170(cento e setenta) centímetros acaba caindo sempre no else ou seja no erro relatado.

Mas caso queria utilizar em centímetros, deixo abaixo a alteração necessária :

 let alt = inputAltura.value / 100;

Devemos dividir esse valor, ou seja a entrada do usuário que depois fica guardada na variável alt por 100, que equivale a um 1m em centímetros, o mesmo que 170 equivale a 1.70, dessa forma temos o resultado esperado.

Por fim deixo o link do codepen onde disponibilizo a cópia do seu projeto com essas alterações .

Espero ter ajudado!

Sucesso

Abraços e até mais!

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

Olá Victor,

Testei com o ajuste que sugeriu mas ainda assim o erro permanece. :(

Confesso que não sei mais onde pode estar o erro.

resposta duplicada

Agora foi Karine, hehe!

Vamos primeiramente alterar o else, uma observação o else nunca é comparado ou seja não há condição para ele, ele deve ser executado caso os outros if e else if sejam todos false, ou seja, como há uma comparação, vamos transformar ele em else if:

else if (imc >= 30){
        return 'obesidade. Busque apoio médico para verificar se sua saúde está sendo afetada pelo excesso de peso.'
    }

Depois a seguinte alteração no imcTotal.innerHTML:

+ ' e o resultado foi: ' + resultado(imc(kg, alt))}</p>`

A função IMC pede parâmetros e não foi repassado nenhum causando mais um erro:

Seu código completo:

let inputNome = document.getElementById("nome");
let inputPeso = document.getElementById("peso");
let inputAltura = document.getElementById("altura");

let imcTotal = document.getElementById("imcTotal")

function calculo(){
    let nome = inputNome.value;
    let kg = inputPeso.value;
    let alt = inputAltura.value;

    imcTotal.innerHTML = `<p>${nome + ', de acordo com seu peso e altura, o IMC está em: ' + imc(kg, alt) + ' e o resultado foi: ' + resultado(imc(kg, alt))}</p>`
}

function imc(n1, n2){
    let kg = inputPeso.value;
    let alt = inputAltura.value;
    const massaCorpo = (kg / (alt * alt));
    const total = massaCorpo.toFixed();
    return total;
}

function resultado(imc){

    if (imc <= 18){
        return 'abaixo do peso. É importante verificar se você está com déficit de massa magra, por isso, busque pela ajuda de um profissional.'
    }
    else if (imc >= 19 && imc <= 24){
        return 'peso normal. Continue cuidando do seu peso e fique em dia com a sua saúde.'
    }
    else if (imc >= 25 && imc <= 29){
        return 'sobrepeso. Fique atento pois o excesso de peso pode trazer malefícios à sua saúde.'
    }
    else if (imc >= 30){
        return 'obesidade. Busque apoio médico para verificar se sua saúde está sendo afetada pelo excesso de peso.'
    }
}

Peço desculpas, pela demora em obter um retorno totalmente funcional, mas agora acredito que funcione!

Fiz as alterações no link verique:

Espero ter ajudado!

Um grande abraço e até mais!

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