Estou com um bloco switch e eu quis saber se com um if daria pra fazer o mesmo.
Se eu tenho
switch (c){
case 1 : m = 1.0;
break;
// Se for o 1, m recebe 1.0 e termina(sai do bloco)
case 2 : p = 2.0;
case 3 : m = 3.0;
break;
/* se for 2 ou 3, p recebe 2.0 e m recebe 3.0. Termina.*/
default : m = 0;
//se não for nenhum dos outros, m recebe zero.
}
O que GiancarloBraga disse está perfeito. Complementando, em relação ao seu switch:
switch(c){case1:m=1.0;break;// Se for o 1, m recebe 1.0 e termina(sai do bloco)case2:p=2.0;case3:m=3.0;break;/* se for 2 ou 3, p recebe 2.0 e m recebe 3.0. Termina.*/default:m=0;//se não for nenhum dos outros, m recebe zero.}
Mas de acordo com seu comentário, existe um erro no seu switch.
Quando c == 2, m e p serão setados. Porém, quando c==3, somente o m será setado. Isto porque o código é executado a partir do case que verifique a condição de igualdade.
Para que as duas atribuições aconteçam quando c == 2 || c == 3, faça assim:
switch(c){case1:m=1.0;break;// Se for o 1, m recebe 1.0 e termina(sai do bloco)case2:case3:p=2.0;m=3.0;break;/* se for 2 ou 3, p recebe 2.0 e m recebe 3.0. Termina.*/default:m=0;//se não for nenhum dos outros, m recebe zero.}
Espero ter ajudado…
peczenyj
veja bem
Se vc só trabalha com cases terminados em break, então pode mapear diretamente para uma sequencia de ifs.
Caso contrario, tens que analisar o “fall through”, como nesse caso: