¿Tipo de datos de las etiquetas de casos de la declaración de cambio en C++?

En la declaración de cambio de C++, la expresión de cada etiqueta de caso debe ser una expresión constante entera. 
Por ejemplo, el siguiente programa falla en la compilación. 
 

CPP

/* Using non-const in case label */
#include<stdio.h>
int main()
{
  int i = 10;
  int c = 10;
  switch(c)
  {
    case i: // not a "const int" expression
         printf("Value of c = %d", c);
         break;
    /*Some more cases */
                    
  }
  return 0;
}

Poner const antes de i hace que el programa anterior funcione.
 

CPP

#include<stdio.h>
int main()
{
  const int i = 10;
  int c = 10;
  switch(c)
  {
    case i:  // Works fine
         printf("Value of c = %d", c);
         break;
    /*Some more cases */
                    
  }
  return 0;
}

Nota: el hecho anterior es solo para C++. En C, ambos programas producen un error. En C, el uso de un literal entero no provoca un error.
Programa para encontrar el número más grande entre dos números usando switch case:
 

C

#include<stdio.h>
int main()
{
  int n1=10,n2=11;
 
  // n1 > n2 (10 > 11) is false so using 
  // logical operator '>', n1 > n2 produces 0
  // (0 means false, 1 means true) So, case 0
  // is executed as 10 > 11 is false. Here we
  // have used type cast to convert boolean to int,
  // to avoid warning.
 
  switch((int)(n1 > n2))
  {
    case 0: 
         printf("%d is the largest\n", n2);
         break;
    default:
         printf("%d is the largest\n", n1);
  }
 
  // n1 < n2 (10 < 11) is true so using logical
  // operator '<', n1 < n2 produces 1 (1 means true,
  // 0 means false) So, default is executed as we
  // don't have case 1 to be executed.
 
  switch((int)(n1 < n2))
  {
    case 0: 
         printf("%d is the largest\n", n1);
         break;
    default:
         printf("%d is the largest\n", n2);
  }
 
  return 0;
}
//This code is contributed by Santanu

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *