Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: oliverm en 9 Julio 2013, 00:52 am



Título: Problema con comando switch
Publicado por: oliverm en 9 Julio 2013, 00:52 am
Buenas, estoy aprendiendo c++ y tuve un problema con el comando switch.
El código es el siguiente:

Código:
#include <iostream>
 
using namespace std;
 
int main()
{
    unsigned int opcion;
cout<<"[1]\tKilogramos a libras."<<endl<<"[2]\tDolares a pesos.\n";
cout<<endl<<"Escoja la unidad a transformar\n";
cin>>opcion;
while (opcion > 2)
{
cout<<"Escoja una opcion valida (1 o 2)\n";
cin>>opcion;
}
unsigned short kg, lb, dl,ps;
switch (opcion)
{
case 1: cout<<"Ingrese kilogramos\n";
cin>>kg;
cout<<kg<<" kilogramos son "<<(float) (kg/0.45)<<" libras\n";
case 2: cout<<"Ingrese dolares\n";
cin>>dl;
cout<<dl<<" dolares son "<<(float) (dl*500)<<" pesos\n";
}
cin>>opcion; //es para que no se cierre la consola :P

return 0;
}
Cuando pongo opción 1, me pido los kilogramos, me muestra cuantas libras son, pero después de eso me pide que ingrese dolares, siendo que la variable opcion tiene el valor de 1. Si mal no entiendo switch lo que hace es ver el valor de la variable y dependiendo del caso realizar una acción, en este caso si elijo la primera, al terminarse pasa a realizar la segunda, cosa que no quiero y no entiendo por qué sucede. Saludos.
PD: Pasa en Microsoft visual Studio y en Dev-cpp


Título: Re: Problema con comando switch
Publicado por: rir3760 en 9 Julio 2013, 01:05 am
En la sentencia de selección "switch" el control del programa salta a la sentencia después de la etiqueta que coincida, nada mas.

Para que cada caso sea exclusivo se debe colocar una sentencia "break;" al final del bloque para delimitarlo.

Esa sentencia en tu programa se debe cambiar a:
Código
  1. switch (opcion){
  2. case 1:
  3.   cout << "Ingrese kilogramos\n";
  4.   cin >> kg;
  5.   cout << kg << " kilogramos son " << (float) (kg / 0.45) << " libras\n";
  6.   break;
  7. case 2:
  8.   cout << "Ingrese dolares\n";
  9.   cin >> dl;
  10.   cout << dl << " dolares son " << (float) (dl * 500) << " pesos\n";
  11.   break;
  12. }

Un saludo