In C++ switch statement, the expression of each case label must be an integer constant expression.
For example, the following program fails in compilation.
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;
} |
Putting const before i makes the above program work.
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;
} |
Note : The above fact is only for C++. In C, both programs produce an error. In C, using an integer literal does not cause an error.
Program to find the largest number between two numbers using 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 |
Article Tags :