Tutorialspoint.dev

Data type of case labels of switch statement in C++?

In C++ switch statement, the expression of each case label must be an integer constant expression.

For example, the following program fails in compilation.

/* 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;
}

Putting const before i makes the above program work.

#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;
}

Note : The above fact is only for C++. In C, both programs produce error. In C, using a integer literal does not cause error.

Program to find the largest number between two numbers using switch case:

#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 ", n2);
         break;
    default:
         printf("%d is the largest ", 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 ", n1);
         break;
    default:
         printf("%d is the largest ", n2);
  }
  
  return 0;
}
//This code is contributed by Santanu

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



This article is attributed to GeeksforGeeks.org

leave a comment

code

0 Comments

load comments

Subscribe to Our Newsletter