Ayuda Switch no defaultea

Iniciado por Raiden, 3 Septiembre 2020, 23:19 PM

0 Miembros y 1 Visitante están viendo este tema.

Raiden

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:
#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.

EdePC

Saludos,

- El problema está en tus:

Código (cpp) [Seleccionar]
      case '\n':
      case '\t':
      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

Raiden

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.


EdePC

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 (cpp, 33,34,35) [Seleccionar]
#include <iostream>

using namespace std;

int main() {

  int NumProducto = 0;

  cout << "\\n => " << (int)'\n' << endl;
  cout << "\\t => " << (int)'\t' << endl;
  cout << "   => " << (int)' ' << endl;

  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 10:
      case 9:
      case 32:
        break;
      default:
        cout << "Numero incorrecto." << endl;
        cout << "Numero incorrecto." << endl;
        cout << "Numero incorrecto." << endl;
        cout << "Numero incorrecto." << endl;
        cout << endl;
    }
  }
  system("Pause");
  return 0;
}


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.