Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Raiden en 3 Septiembre 2020, 23:19 pm



Título: Ayuda Switch no defaultea
Publicado por: Raiden en 3 Septiembre 2020, 23:19 pm
Hola a todos,

Tengo un problema con un codigo, este tiene un swtich pero no puedo hacerlo funcionar bien..
Apreto 1,2,3,4,5,6,7 u 8 y anda perfecto pero cuando apreto 9 o 10 no activa el mecanismo de default, alguien sabe porque me sucede eso?

Aqui le dejo el codigo:
Código:
#include <iostream>
using namespace std;
int main()
{
    int NumProducto=0;
   
   
    while(NumProducto!=-1)
    {
    cout<<"Introduzca Numero de Caso: ";cin>>NumProducto;

    switch (NumProducto)
    {
       
         case 1:
        cout<<"CASO 1"<<endl;
         break;
         case 2:
        cout<<"CASO 2"<<endl;
         break;
         case 3:
        cout<<"CASO 3"<<endl;
         break;
         case 4:
        cout<<"CASO 4"<<endl;
         break;
         case 5:
        cout<<"CASO 5"<<endl;
        break;
        case '\n':
        case '\t':
        case ' ':
            break;
               
    default:
        cout<<"Numero incorrecto."<<endl;
        cout<<"Numero incorrecto."<<endl;
        cout<<"Numero incorrecto."<<endl;
        cout<<"Numero incorrecto."<<endl;
        cout<<endl;
    }
}
system("Pause");
return 0;
}



Gracias.


Título: Re: Ayuda Switch no defaultea
Publicado por: EdePC en 4 Septiembre 2020, 03:09 am
Saludos,

- El problema está en tus:

Código
  1.      case '\n':
  2.      case '\t':
  3.      case ' ':

- Pues como estás comparando un Integer con esos Char hay que traducir los Char a Int: 10, 9 y 32 respectivamente. Tu Default no funciona con 10, 9 y 32 por esa razón, ya que entran en ese Case librándose del Default


Título: Re: Ayuda Switch no defaultea
Publicado por: Raiden en 7 Septiembre 2020, 23:28 pm
Entiendo, pero como hago para hacer que no entren en el ultimo case cuando apreto 9?

Poruqe el ultimo case deberia activarse solamente cuadno envio una nueva linea es decir \n por ejemplo.



Título: Re: Ayuda Switch no defaultea
Publicado por: EdePC en 8 Septiembre 2020, 01:43 am
Pues como dije, haber, como estás usando un Int para guardar la entrada por teclado, pues pasa que tus Case hacen comparación con dicho Int, es decir, tu código sería idéntico al siguiente:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  
  7.  int NumProducto = 0;
  8.  
  9.  cout << "\\n => " << (int)'\n' << endl;
  10.  cout << "\\t => " << (int)'\t' << endl;
  11.  cout << "   => " << (int)' ' << endl;
  12.  
  13.  while(NumProducto != -1) {
  14.    cout << "Introduzca Numero de Caso: ";
  15.    cin >> NumProducto;
  16.  
  17.    switch (NumProducto) {
  18.      case 1:
  19.        cout << "CASO 1" << endl;
  20.        break;
  21.      case 2:
  22.        cout << "CASO 2" << endl;
  23.        break;
  24.      case 3:
  25.        cout << "CASO 3" << endl;
  26.        break;
  27.      case 4:
  28.        cout << "CASO 4" << endl;
  29.        break;
  30.      case 5:
  31.        cout << "CASO 5" << endl;
  32.        break;
  33.      case 10:
  34.      case 9:
  35.      case 32:
  36.        break;
  37.      default:
  38.        cout << "Numero incorrecto." << endl;
  39.        cout << "Numero incorrecto." << endl;
  40.        cout << "Numero incorrecto." << endl;
  41.        cout << "Numero incorrecto." << endl;
  42.        cout << endl;
  43.    }
  44.  }
  45.  system("Pause");
  46.  return 0;
  47. }
  48.  

cin omite el Enter o salto de línea '\n' cuando asigna la variable, además no asigna la variable hasta que se introduzca algún valor que no sea simplemente Enter, así que no lo vas a poder recuperar si solo usas cin sin más.