---
title: 2.9 Nested switch Statements
description: "A `switch` statement can be placed inside another `switch` statement. The inner `switch` is evaluated only after execution enters the block containing it. ``` #include int main() { int category = 1; int option = 2; switch (category) { case…"
url: "https://edcret.in/docs/c-programming/control-flow/2-9-nested-switch-statements/"
updated: "2026-09-06"
category: C Programming / Control Flow
---

# 2.9 Nested switch Statements

A `switch` statement can be placed inside another `switch` statement. The inner `switch` is evaluated only after execution enters the block containing it.

```
#include <stdio.h>

int main()
{
    int category = 1;
    int option = 2;

    switch (category)
    {
        case 1:
            switch (option)
            {
                case 1:
                    printf("Category 1, Option 1\n");
                    break;

                case 2:
                    printf("Category 1, Option 2\n");
                    break;

                default:
                    printf("Invalid option\n");
            }
            break;

        case 2:
            printf("Category 2\n");
            break;

        default:
            printf("Invalid category\n");
    }

    return 0;
}
```

### Example Output

```
Category 1, Option 2
```

### Explanation

The outer `switch` evaluates `category`:

```
switch (category)
```

Since `category` is `1`, execution enters `case 1`.

That case contains another `switch`:

```
switch (option)
```

The value of `option` is `2`, so `case 2` of the inner `switch` executes.

The `break` inside the inner `switch` exits the inner `switch`. The `break` belonging to the outer `case 1` then exits the outer `switch`.

The two `switch` statements have separate `case` labels and separate control flow.
