Switch(c) é equivalente ao if(c==algum dado)?

3 respostas
F

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.

}

Com if, seria assim?

if(c==1){
    m=1.0;

}else{
	if((c==2) || (c==3)){
	 p=2.0;
	 m=3.0;
}else{
	  m=0;	
}			       
                  

}

Obrigado

3 Respostas

GiancarloBraga

Olá.

Com if seria assim:

if(c == 1){

m = 1.0;

} else if( outra condição ){

} else{

}

Abraço.

H

O que GiancarloBraga disse está perfeito. Complementando, em relação ao seu switch:

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.

}

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){
        case 1 : m = 1.0;
            break;
                           // Se for o 1, m recebe 1.0 e termina(sai do bloco)


        case 2 : 
        case 3 : 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:

:wink:

Criado 26 de agosto de 2007
Ultima resposta 26 de ago. de 2007
Respostas 3
Participantes 4