Lect Switch-Case
Lect Switch-Case
Lect Switch-Case
The control statement that allows us to make a decision from the number of
choices is called a switch, or more correctly a switch-case-default, since these
three keywords go together to make up the control statement. They most often
appear as follows:
switch ( integer expression )
{
case constant 1 : do this ;
case constant 2 : do this ;
case constant 3 : do this ;
default :
do this ;
}
The integer expression following the keyword switch is any C expression that will
yield an integer value. It could be an integer constant like 1, 2 or 3, or an expression
that evaluates to an
integer. The keyword case is followed by an integer or a character constant. Each
constant in each case must be different from all the others. The “do this” lines in the
above form of switch represent any valid C statement.
What happens when we run a program containing a switch? First, the integer
expression following the keyword switch is evaluated. The value it gives is then
matched, one by one, against the constant values that follow the case statements.
When a match is found, the program executes the statements following that case, and
all subsequent case and default statements as well. If no match is found with any of
the case statements, only the statements following the default are executed. A few
examples will show how this control structure works.
Consider the following program:
main( )
{
int i = 2 ;
switch ( i )
{
case 1 :
printf ( "I am in case 1 \n" ) ;
case 2 :
printf ( "I am in case 2 \n" ) ;
case 3 :
printf ( "I am in case 3 \n" ) ;
default :
printf ( "I am in default \n" ) ;
}
}
The output of this program would be:
I am in case 2
I am in case 3
I am in default
The output is definitely not what we expected! We didn’t expect the second and third
line in the above output. The program prints case 2 and 3 and the default case. Well,
yes. We said the switch executes the case where a match is found and all the
subsequent cases and the default as well.
If you want that only case 2 should get executed, it is upto you to get out of the
switch then and there by using a break statement. The following example shows
how this is done. Note that there is no need for a break statement after the default,
since the control comes out of the switch anyway.
main( )
{
int i = 2 ;
switch ( i )
{
case 1 :
printf ( "I am in case 1 \n" ) ; break ;
case 2 :
printf ( "I am in case 2 \n" ) ; break ;
case 3 :
printf ( "I am in case 3 \n" ) ; break ;
default :
printf ( "I am in default \n" ) ;
}
}
The output of this program would be:
I am in case 2
The operation of switch is shown below in the form of a flowchart for a better
understanding.
The Tips and Traps
A few useful tips about the usage of switch and a few pitfalls to be avoided:
(a) The earlier program that used switch may give you the wrong impression that
you can use only cases arranged in ascending order, 1, 2, 3 and default. You can
in fact put the cases in any order you please. Here is an example of scrambled
case order:
main( )
{
int i = 22 ;
switch ( i )
{
case 121 :
printf ( "I am in case 121 \n" ) ; break ;
case 7 :
printf ( "I am in case 7 \n" ) ; break ;
case 22 :
printf ( "I am in case 22 \n" ) ; break ;
default :
printf ( "I am in default \n" ) ;
}
}
The output of this program would be:
I am in case 22
(d) You are also allowed to use char values in case and switch as shown in the
following program:
main( )
{
char c = 'x' ;
switch ( c )
{
case 'v' :
printf ( "I am in case v \n" ) ; break ;
case 'a' :
printf ( "I am in case a \n" ) ; break ;
case 'x' :
printf ( "I am in case x \n" ) ; break ;
default :
printf ( "I am in default \n" ) ;
}
}
The output of this program would be:
I am in case x
In fact here when we use ‘v’, ‘a’, ‘x’ they are actually replaced by the ASCII
values (118, 97, 120) of these character constants.
(c) At times we may want to execute a common set of statements for multiple cases.
How this can be done is shown in the following example.
main( )
{
char ch ;
printf ( "Enter any of the alphabet a, b, or c " ) ; scanf ( "%c", &ch ) ;
switch ( ch )
{
case 'a' : case 'A' :
printf ( "a as in ashar" ) ; break ;
case 'b' : case 'B' :
printf ( "b as in brain" ) ; break ;
case 'c' : case 'C' :
printf ( "c as in cookie" ) ; break ;
default :
printf ( "wish you knew what are alphabets" ) ;
}
}
Here, we are making use of the fact that once a case is satisfied the control
simply falls through the case till it doesn’t encounter a break statement. That is
why if an alphabet a is entered the case ‘a’ is satisfied and since there are no
statements to be executed in this case the control automatically reaches the next
case i.e. case ‘A’ and executes all the statements in this case.
(d) Even if there are multiple statements to be executed in each case there is no need
to enclose them within a pair of braces (unlike if, and else).
(e) Every statement in a switch must belong to some case or the other. If a statement
doesn’t belong to any case the compiler won’t report an error. However, the
statement would never get executed. For example, in the following program the
printf( ) never goes to work.
main( )
{
int i, j ;
printf ( "Enter value of i" ) ; scanf ( "%d”, &i ) ;
switch ( i )
{
printf ( "Hello" ) ; case 1 :
j = 10 ; break ;
case 2 :
j = 20 ; break ;
}
}
(f) If we have no default case, then the program simply falls through the entire
switch and continues with the next instruction (if any,) that follows the closing
brace of switch.
(g) Is switch a replacement for if? Yes and no. Yes, because it offers a better way of
writing programs as compared to if, and no because in certain situations we are
left with no choice but to use if. The disadvantage of switch is that one cannot
have a case in a switch which looks like:
case i <= 20 :
All that we can have after the case is an int constant or a char constant or an
expression that evaluates to one of these constants. Even a float is not allowed.
The advantage of switch over if is that it leads to a more structured program and
the level of indentation is manageable, more so if there are multiple statements
within each case of a switch.
(h) We can check the value of any expression in a switch. Thus the following
switch statements are legal.
switch ( i + j * k )
switch ( 23 + 45 % 4 * k ) switch ( a < 4 && b > 7
)
Expressions can also be used in cases provided they are constant expressions.
Thus case 3 + 7 is correct, however, case a + b is incorrect.
(i) The break statement when used in a switch takes the control outside the
switch. However, use of continue will not take the control to the beginning
of switch as one is likely to believe.
(j) In principle, a switch may occur within another, but in practice it is rarely
done. Such statements would be called nested switch statements.
(k) The switch statement is very useful while writing menu driven programs.
This aspect of switch is discussed in the exercise at the end of this chapter.
===================================================================
#include <stdio.h>
#include <conio.h>
using namespace std;
int main()
{
int N1,N2;
char ch;
printf("Enter Two Integer Values please : ");
scanf("%d %d",&N1,&N2);
printf("For Addition Press---------------- +\n");
printf("For Subtraction Press------------- -\n");
printf("For Multiplication Press---------- *\n");
printf("For Qoutient Press---------------- /\n");
printf("For Remaintder Value Press-------- %c\n",'%');
printf("Enter your choice please ==> ");
ch=getche();
//scanf("%c",&ch);
//scanf("%c",&ch);
printf("\n");
switch(ch)
{
case '+':
printf("Sum = %d\n",N1+N2); break;
case '-':
printf("Difference = %d\n",N1-N2); break;
case '*':
printf("Product = %d\n",N1*N2); break;
case '/':
printf("Qoutient = %d\n",N1/N2); break;
case '%':
printf("Remainder = %d\n",N1%N2); break;
default:
printf("Press the correct Choice\n TRY Again\n");
}
return(0);
}
========================================================
#include<iostream>
#include<conio.h>
#include <windows.h>
#include <math.h>
#define X 27
#define Y 7
using namespace std;
//Defines gotoxy() for ANSI C compilers.
void gotoxy(short x, short y)
{
COORD pos = {x, y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
int main()
{
char op;
long int ch,n,r;
while(1)
{
system("CLS");
gotoxy(X,Y+1); printf("**************************");
gotoxy(X,Y+2); printf("* M A I N M E N U *");
gotoxy(X,Y+3); printf("**************************");
gotoxy(X,Y+4); printf("* For Factorial press...1*");
gotoxy(X,Y+5); printf("* For GCD press.........2*");
gotoxy(X,Y+6); printf("* For Reverse # press...3*");
gotoxy(X,Y+7); printf("* For Octal Value press.4*");
gotoxy(X,Y+8); printf("* Largest of 3 # press..5*");
gotoxy(X,Y+9); printf("* For Quiting press.....6*");
gotoxy(X,Y+10);printf("**************************");
gotoxy(X,Y+11);printf("* Enter Your Choice...{ }*");
gotoxy(X,Y+12);printf("**************************");
gotoxy(X+23,Y+11); scanf("%d",&ch);
system("CLS");
switch(ch)
{
case 1:
long int p,n,j;
printf("Enter the number=");
scanf("%ld",&n);
p=1;
for(j=n;j>=1;j--)
p=p*j;
printf("%ld! = %ld\n",n,p);
break;
case 2:
long int d;
printf("Enter two integers=");
scanf("%ld %ld",&d,&n);
while (d!=0)
{r=n%d;
n=d;
d=r;}
printf("GCD== %d\n",n);
break;
case 3:
long int s;
printf("Enter an integer Number=");
scanf("%ld",&n);
s=0;
for(;n>0;)
{
r=n%10;
s=s+r;
n=n/10;
if(n!=0)
s=s*10;
}
printf("Reverse of Number is = %ld\n",s);
break;
case 4:
{
long int t,O=0,K=0,m;
printf("\nenter a decimal number=");
scanf("%ld", &n);
t=n;
while(n!=0)
{
m=pow(10,K++);
r=n%8;
O=O+r*m;
n=n/8;
}
printf("\noctal equavalent of %ld is equal to %ld\n",t,O);
}
break;
case 5:
int max,a,b,c;
printf("Enter the numbers=");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
max=a;
else
max=b;
if(max>c)
printf("%d is largest\n",max);
else
printf("%d is largest\n",c);
break;
case 6:
printf("**********GOOD BYE**********\n");
printf("Press any key to continue\n");
//getch();
exit(1);
default:
printf("select the correct choice please\n");
printf("press any key to try again\n");
} //end of switch statement.
getch();
//scanf("%c",&op);
// getch();
} //end of while loop.
return(0);
} //end of main program.