I am following the book "C Primer Plus" and encounter such a snippet of code:

```
int main()
{
    int x = 30;

    printf("x in outer block: %d at %p\n", x, &x);
    {
        int x = 77; // new x , hides first x
        printf("x in inner block: %d at %p\n", x, &x);
    }
    printf("x in outer block: %d at %p\n", x, &x);
    while (x++ < 33) //original x
    {
        int x = 100;
        x++;
        printf("x in while loop: %d at %p\n", x, &x);
    }
    printf("x in outer block: %d at %p\n", x, &x);

    return 0;
}

```

It outputs:

```
In [23]: !./a.out
x in outer block: 30 at 0x7ffee7243788
x in inner block: 77 at 0x7ffee7243784
x in outer block: 30 at 0x7ffee7243788
x in while loop: 101 at 0x7ffee7243780
x in while loop: 101 at 0x7ffee7243780
x in while loop: 101 at 0x7ffee7243780
x in outer block: 34 at 0x7ffee7243788

```

It confuse me a lot on 

```
x in while loop: 101 at 0x7ffee7243780
x in while loop: 101 at 0x7ffee7243780
x in while loop: 101 at 0x7ffee7243780

```

How could I make it output?

```
x in while loop: 101 at 0x7ffee7243780
x in while loop: 102 at 0x7ffee7243780
x in while loop: 103 at 0x7ffee7243780

```