Point out the error in the following C program that uses a switch statement and a variable in a case label: int main() { int i = 4, j = 2; switch (i) { case 1: printf("To err is human, to forgive is against company policy."); break; case j: printf("If you have nothing to do, do not do it here."); break; } return 0; }
-
Acase j is invalid because case labels must be constant integer expressions, not variables
-
BThe switch expression i must be of type char and cannot be of type int
-
CUsing printf inside a switch is not allowed in C
-
DThe program must include a default label; omitting it is a compilation error
Answer
Correct Answer: case j is invalid because case labels must be constant integer expressions, not variables
Explanation
Introduction / Context:This question tests understanding of the rules for case labels in a switch statement in C. It focuses on the requirement that case labels be constant expressions known at compile time.
Given Data / Assumptions:
- The switch expression is the integer variable i with value 4.
- There is a case 1 label.
- There is a case j label where j is a variable with value 2.
- We assume standard C compilation rules.
Concept / Approach:According to the C standard, each case label in a switch must be a constant integer expression that the compiler can evaluate at compile time. Examples include literal integers, enumeration constants, or expressions composed only of constants and operators. A plain variable such as j is not a constant expression. Therefore, case j is not valid as a case label.
Step-by-Step Solution:Step 1: Identify the case labels in the switch statement: case 1 and case j.Step 2: case 1 is fine because 1 is a constant integer expression.Step 3: case j uses a variable j. The value of j is not a compile time constant expression.Step 4: The compiler must reject case j as an invalid case label, producing a diagnostic message.
Verification / Alternative check:If you compile this program with a standard C compiler, you will receive an error similar to "case label does not reduce to an integer constant". If you change case j to case 2, the program compiles correctly, showing that the problem is specifically the use of a variable as a case label.
Why Other Options Are Wrong:Option B is incorrect because the switch expression can legally be an int; it does not need to be char.Option C is false because printf can be used inside switch cases like any other statement.Option D is incorrect because a default label is optional in C; omitting it is allowed.
Common Pitfalls:Programmers sometimes try to use variables or nonconstant expressions as case labels to make code more flexible. This is not allowed in standard C. If a dynamic decision is needed, it must be implemented with if or else logic rather than case labels.
Final Answer:The error is that case j is invalid because case labels must be constant integer expressions, not variables.