Jump to content
totis

Duvida Super Iniciante (SWITCH)

Recommended Posts

Olá amigos, preciso de uma ajuda, sou iniciante em programação e php, bem iniciante mesmo.

 

Estou fazendo um exercício de switch estou com uma duvida que não consigo resolver.

 

Então, a duvida é a seguinte, eu posso colocar qualquer numero em $anoNasc que o código está rodando certinho,

porém quando eu coloco um número igual ao $anoAtual não está dando certo...

nesse caso a $idade daria "0", porém o resultado não está sendo "Você é uma criança" e sim está sendo "Você é um adolescente".

 

Onde estou errando?

 

        <?php
            $anoNasc = 2020;
            $anoAtual = 2020;
            $idade = ($anoAtual - $anoNasc);
                       
            switch($idade):
                case ($idade >= 0) and ($idade < 14):
                    echo "Você é uma criança";     
                    break;
                case ($idade >= 14) and ($idade < 18):
                    echo "Você é um adolescente";                    
                    break;
                case ($idade >= 18) and ($idade < 60):
                    echo "Você é adulto";
                    break;
                case $idade >= 60:
                    echo "Você é idoso";
                    break;
                default:
                    echo "Você não nasceu";
            endswitch;
        ?>

 

Share this post


Link to post
Share on other sites

Salve, na verdade eu creio que seja um erro de lógica , tenta a versão que corrigi e ve se da o resultado esperado ... 

			$anoNasc = 2050;
            $anoAtual = 2050;
            $idade = ($anoAtual - $anoNasc);
                       
            switch($idade):
                case ($idade >= 1) and ($idade < 14):
                    echo "Você é uma criança";     
                    break;
                case ($idade >= 14) and ($idade < 18):
                    echo "Você é um adolescente";                    
                    break;
                case ($idade >= 18) and ($idade < 60):
                    echo "Você é adulto";
                    break;
                case $idade >= 60:
                    echo "Você é idoso";
                    break;
                default:
                    echo "Você não nasceu";
            endswitch;

O problema é o Primeiro case que você gerou uma comparação de > ou = a 0 e isso gerou um conflito com o Default e adolescente , se tornar essa condição só > 0 ou melhor , >= 1 ele se torna correto , tentei todas idade aqui e agora deu certo.. verificar se é isso mesmo qualquer coisa só falar ..

 

Abraços, tudo de bom =)

Share this post


Link to post
Share on other sites

Boa tarde!
É importante entender como o php converte para booleanos, para evitar pegadinhas

var_dump(0 == true); // false
var_dump(1 == true); // true
var_dump(1 === true); // false
var_dump(-1 == true); // true

 

Não deixe de ver: http://us2.php.net/manual/en/language.types.boolean.php
 

No caso do switch, ele faz comparação fraca (==)


Sendo o valor de idade, zero:

($idade >= 0) and ($idade < 14) # isso retornara um true, e zero com true é igual a false. 
# Reiterando: 
var_dump(0 == true); # retornara um false 

Veja mais em:
Http://www.php.net/manual/en/types.comparisons.php#types.comparisions-loose
 

Por esse motivo que não entrava na primeira condição.

@Webr, mudar: 
case ($idade >= 0) and ($idade < 14):
para
case ($idade >= 1) and ($idade < 14):
Apesar de fazer cair na primeira condição, esta errado, pelo simples fato de zero ser menor do que 1

  • +1 3

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Natália Prego Côco Mendes
      Boa tarde.
       
      Estou a começar a trabalhar com o Dreamweaver e estou com dificuldade e conseguir este efeito na minha página (enviei foto). Já consegui montar a parte de cima, mas agora ao tentar fazer o bloco de baixo, com tit, foto e texto, não consigo que fique alinhado como está na foto. Será que podem ajudar-me? Eu tenho o seguinte código e CSS feito:
      <!doctype html>
      <html>
      <head>
      <meta charset="UTF-8">
      <title>index.html</title>
      <link href="exp.css" rel="stylesheet" type="text/css">
      </head>
      <body tracingsrc="Newsletter_2.jpg" tracingopacity="30">
        <div class="logo"><img src="imagens/Ellipse_1.png" width="221" height="42" alt=""/></div>
      <header class="header">
        <div class="texto-topo">texto topo texto topo</div>
          </header>
      <div class="bloco-a"><div class="tit-bloco-a">título bloco a</div>
      <div class="foto-bloco-a"><img src="imagens/foto1.png" width="222" height="211" alt=""/></div>
      <div class="txt-bloco-a">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quis ipsum suspendisse ultrices gravida. Risus commodo viverra maecenas accumsan lacus vel facilisis. 
      </div></div>
      </body>
      </html>
       
      @charset "UTF-8";
      *{
          margin:0 auto;
      }
      .logo {
          width: 30px;
          height: 20px;
          margin-top: 95px;
          margin-left: 356px;
          float: left;
      }
      .texto-topo {
          width: 600px;
          margin-left: 93px;
          margin-top: 20px;
          width: 591px;
          height: 42px;
          font-family: Rift;
          color: #0e3659;
          font-size: 35px;
          font-weight: 700;
          transform: scale(1.152,1.152);
      }
      .tit-bloco-a {
          width: 154px;
          height: 25px;
          float: left;
          margin-top: 724px;
          margin-left: -475px;
      }
      .foto-bloco-a img {
          width: 222px;
          height: 211px;
          float: left;
          float: left
      }
      }
      .header {
          width: 688px;
          height: 390px;
          margin-left: 196px;
          margin-top: 301px;
          background-image: url(imagens/salty-wings-1432145-unsplash.png);
          position: absolute;
          
          
      }
      .tit-bloco-a{
          width: 154px;
          height: 25px;
          font-family: Rift;
          color: #0e3659;
          font-size: 35px;
          font-weight: 700;
          float: left;
      }
      .txt-bloco-a {
          width: 216px;
          height: 120px;
          font-family: Rift;
          color: rgba(14, 54, 89, 0.8);
          font-size: 15px;
          font-weight: 700;
          transform: scale(1.01,1.01);
          margin-top: 750px;
          text-align: center;
          float: left;
      }
      .bloco-a {
          width: 216px;
          height: 600;
          margin-top: 1000px;
          margin-left: 196;
          float: left;
          position: absolute;
      }

    • By Izaac Borges
      Boa noite, me chamo Izaac Borges, acabei de começar aqui. Eu estava procurando um fórum de tecnologia onde eu pudesse encontrar gente disposta a me dar algumas dicas. Estou começando a programar agora, sempre gostei da ideia de programar, já tive algumas experiencias programando código para ,Arduíno coisas bem básicas mas agora estou estudando para valer e escolhi a linguagem C para começar pois já conhecia um pouco dela.
       
      Porem agora estou querendo fazer um sistema simples, onde ele armazena os seus dados(no caso seriam números de jogos da loteria) e  depois você insere os números sorteados e ele diz quantos acertos você fez em cada jogo. Gostaria de saber se é possível fazer esse tipo de programa em C e se eu iria precisar de alguma outra tecnologia para banco de dados, se sim qual tecnologia recomendam para quem está iniciando e quer aprender fazendo pequenos projetos como esse.
    • By Cloudinbr
      desde pequeno sempre tive esse desejo ardente de poder contar uma historia através de um jogo, com um ótimo game play, historia envolvente e dinâmica etc... então assim que completei meus 16 anos, resolvi começar a pesquisar mais sobre a criação de jogos, e a uns meses atras resolvi começar a estudar c++. eu tambei baixei o Godot, que é uma engine boa para criação de jogos e esta ganhando uma certa fama ultimamente, e tambem tem suporte a c++. bem, ainda não estou programando nenhum game porque estou na metade dos meus estudos sobre c++ ainda, mais queria algumas dicas:
       
      *é necessário estudar outras linguagens da programação para programar jogos? se sim quais vocês recomendam?
       
      * Existe algum livro em pdf que poderia me ajudar mais a estudar c++?
       
      *Ultimamente fiquei com duvida se realmente conseguiria fazer um jogo bom em c++, então poderiam me dar exemplos de jogos legais feitos em c++?
       
      enfim, se quiserem me der outras dica ficarei feliz, sou relativamente um iniciante quando se trata de desenvolver jogos(ja tentei fazer uma coisa ou 2 no rpgmaker vxace mas como não sabia nada de programação e só usava os recursos do programa, saia tudo cagado ksksksks) então adoraria saber de dicas dos mais experientes no assunto :v
    • By Diogo92
      Bom dia.
       
      Me formei em Sistemas de informação em 2013, mas nunca consegui trabalhar na área.
      Consegui um emprego fora da área, e com a dificuldade de conseguir emprego na área acabei ficando acomodado nesse meu atual emprego e não tive contato mais com programação.
      Na época que fiz a faculdade a área que eu mais se identifiquei foi com a programação web onde aprendi um pouco de PHP e HTML.
      Estou com 27 anos, moro em São Paulo Capital e esse ano tomei a decisão de tentar entrar na área de programação novamente.
       
      Vocês acham que vale a pena aprender PHP agora ou seria melhor aprender outra linguagem?
      Se sim, alguem sabe algum lugar onde tenha um bom curso (de preferencia presencial) por onde eu possa começar?
       
      Estou cheio de dúvidas e não sei por onde começar.
       
      Obrigado.
       
       
       
       
    • By ABGui
      Oi, gostaria de saber que tipo de classe ou função eu posso usar de forma que crie no site uma sessão de artigos ou postagens que possam ser alteradas ou adicionadas pelo administrador do site sem a necessidade de acesso ao código PHP. 
      Mais ou menos como se fosse uma opção para adicionar mais posts à página principal, e que os mais antigos fossem guardados em uma aba de postagens antigas ou algo assim. 
      O foco está no usuário poder adicionar sem a minha interferência 
      Desde já obrigado. 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.