C Programming - Control Instructions - Discussion

5. 

Which of the following errors would be reported by the compiler on compiling the program given below?

#include<stdio.h>
int main()
{
    int a = 5;
    switch(a)
    {
	case 1:
	printf("First");

	case 2:
	printf("Second");

	case 3 + 2:
	printf("Third");

	case 5:
	printf("Final");
	break;

    }
    return 0;
}

[A]. There is no break statement in each case.
[B]. Expression as in case 3 + 2 is not allowed.
[C]. Duplicate case case 5:
[D]. No error will be reported.

Answer: Option C

Explanation:

Because, case 3 + 2: and case 5: have the same constant value 5.


Prudhvi said: (Jul 11, 2011)  
Please explain in detail.

Abhishek said: (Jul 20, 2011)  
Is variable addition is allowed in case statements ?

Raj said: (Sep 22, 2011)  
Because case 3+2 is equal to case 5. So ambiguity occurs.

Hyma said: (May 16, 2012)  
Yes addition is allowed in case statements but case 3+2 is equal to case 5 so ambiguity is occurs.

Knight said: (May 19, 2012)  
Addition, multiplication, division are allowed in case statement but both the operand should be constant, operation is performed at compile time, for this case compiler get confused while choosing case 5 (ambiguity). So it will raise compile time error.

Deepu said: (Nov 21, 2013)  
in C.

The cases cant be defined as the any operation methods!

Example: the following cases is not allowed.

case 3+2:
case 3/2:
case 3*2;
etc aren't allowed.

The definition after the case must a mere number or the character upon what data type you define.

example:

int a = 4;
switch (a)
case 1:
case 2:
case 3:
case 4:

or else it might be

char ch='A';
switch (ch)

case 'A':
case 'B':
etc..etc..etc.

Naveen said: (Dec 25, 2013)  
@Deepu.

you are wrong about those operation.
You can perform arithmetic operation on case expressions.

case 2+3:
case 3-2:
case 2*3:
case 3/2:

is allowed.

Binal said: (Jan 4, 2015)  
If there's no break statement used, case 5 will not matter right? So it should keep printing till break?

Sri said: (Mar 6, 2015)  
I have a doubt for every case the break statement is needed or not. If it is not needed what will be the output? Can any one explain me?

Shree said: (Mar 15, 2015)  
It is needed because the absence of break statement will leads the execution to continue
the codes until it finds break.

For example:

#include<stdio.h>
int main()
{
switch(1)
{
case 1:
{ printf("1");
break;// if break statement is not included,then the output will 1 2. else the output will be 1.
}
case 2:
{ printf("2");
break;
}
}
}

Ranjith Karthick said: (Aug 5, 2015)  
I have an doubt in switch usage of operator is allowed or not. Can any one explain?

Dhruv said: (Oct 6, 2015)  
What will case 3/2: be evaluated as? Can anyone help?

Mohit Bansal said: (Oct 16, 2015)  
#include<stdio.h>
int main()
{
int x=3,y,z;
y=x=10;
z=x<10;
printf("x=%d y=%d z=%d\n",x,y,z);
return 0;
}

The output is x = 10, y = 10, z = 0.

Please explain?

Venky said: (Oct 30, 2015)  
I compiled it. And I got it error.

So the options are wrong. Also no duplicates should be present in switch.

Amrita said: (Mar 8, 2016)  
@Mohit bansal.

I compiled it. Got the output as mentioned by you mohit.

Explanation:

y=x=10 means the values of x and y have been assigned as 10.

Now,
Z = x<10.

Means, value of z has been assigned as the same as x( here it is 10 from previous line).
But z is not <10. z is =10(since x is 10).

Thus the condition is false and so it returned a value 0. If the condition was true, then the compiler would return a value of 1 and the output would be x=10, y=10, z=1.

This is like a rule.

Vishalakshi said: (Dec 14, 2016)  
Thank you @Amrita.

Ravi said: (Jul 11, 2019)  
Arithmetic operation is allowed in switch case or not?

i.e case (arithmetic operation).

Post your comments here:

Name *:

Email   : (optional)

» Your comments will be displayed only after manual approval.