C Programming - Control Instructions - Discussion

Discussion Forum : Control Instructions - Point Out Errors (Q.No. 5)
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;
}
There is no break statement in each case.
Expression as in case 3 + 2 is not allowed.
Duplicate case case 5:
No error will be reported.
Answer: Option
Explanation:

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

Discussion:
18 comments Page 1 of 2.

Amrita said:   9 years ago
@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.

Deepu said:   1 decade ago
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.

Shree said:   1 decade ago
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;
}
}
}

Knight said:   1 decade ago
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.

Mohit bansal said:   10 years ago
#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?

Naveen said:   1 decade ago
@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.

Sri said:   1 decade ago
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?

Venky said:   10 years ago
I compiled it. And I got it error.

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

Binal said:   1 decade ago
If there's no break statement used, case 5 will not matter right? So it should keep printing till break?

Hyma said:   1 decade ago
Yes addition is allowed in case statements but case 3+2 is equal to case 5 so ambiguity is occurs.


Post your comments here:

Your comments will be displayed after verification.