3
respostas

Como utilizar maiúsculas e minúsculas no S e N?

Olá galera, eu pesquisei aqui no fórum e achei a solução para que o programa funcionasse com o S minúsculo e maiúsculo, porém quando eu utilizo o N minúsculo o erro permanece e o ELSE retorna com uma resposta positiva ao invés de negativa. Alguém poderia me dar uma luz?

Meu código atual está assim:

<meta charset="UTF-8">

<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var idade = parseInt(prompt("Qual é sua idade?"));
    var temCarteira = prompt("Tem carteira? Responda S ou N");

if (idade >= 18 && temCarteira == "S" || "s"){

    mostra("Você pode dirigir!");
}

else {

    mostra("Você não pode dirigir!");
}
</script>
3 respostas

Olá Janaina

Existe um problema na sua condicional:

(idade >= 18 && temCarteira == "S" || "s")

Ele está validando as condições:

condicaoA: idade >= 18

condicaoB: temCarteira == "S"

condicaoC: "s"

Na forma condicaoA && condicaoB || condicaoC

Para validar o "s" corretamente, deve mudar a condição C para temCarteira == "s"

Tambem é necessario agrupar as condições "tem carteira", pois senão é validada pela ordem, fazendo que ele valide (condicaoA && condicaoB) || condicaoC tornando o resultado Verdadeiro sempreque a condição C for verdadeira

(idade >= 18 && (temCarteira == "S" || temCarteira == "s")

_

Alternativamente, é possivel forçar a flag "temCarteira" a ser sempre maiuscula na validação, com a função "toUpperCase", que torna todos os caracteres da string inteira para maiusculo

(idade >= 18 && temCarteira.toUpperCase() == "S")

E ainda, na propria atribuição, pode salvar como booleano

var respostaTemCarteira = prompt("Tem carteira? Responda S ou N");

var temCarteira = (respostaTemCarteira.toUpperCase() == "S");

Assim a variavel temCarteira tera valor true/false, facilitando multiplos usos posteriormente:

(idade >= 18 && temCarteira)

Perfeito, resolveu meu problema. MUITO OBRIGADA!

Optei por deixar o código assim:

<meta charset="UTF-8">

<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var idade = parseInt(prompt("Qual é sua idade?"));
    var temCarteira = prompt("Tem carteira? Responda S ou N");

if (idade >= 18 && (temCarteira == "S" || temCarteira == "s")){


    mostra("Você pode dirigir!");
}

else {

    mostra("Você não pode dirigir!");
}
</script>

Mas ambas as soluções funcionaram perfeitamente.

A outra forma alternativa que testei conforme me orientou:

<meta charset="UTF-8">

<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var idade = parseInt(prompt("Qual é sua idade?"));
    var respostaTemCarteira = prompt("Tem carteira? Responda S ou N");
    var temCarteira = (respostaTemCarteira.toUpperCase() == "S");

if (idade >= 18 && temCarteira){


    mostra("Você pode dirigir!");
}

else {

    mostra("Você não pode dirigir!");
}
</script>

Gratidão!

Solução:

<meta charset="UTF-8">

<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    var idade = parseInt(prompt("Qual é sua idade?"));
    var temCarteira = prompt("Tem carteira? Responda S ou N");

    if(idade >= 18 && temCarteira == "S" || idade >= 18 && temCarteira == "s"){ // Fiz isso pq o usuário pode digitar letra maiúscula e minúscula
        mostra("Você pode dirigir");

    }else{
        mostra("Você não pode dirigir!");

    }

</script>