Just one example what you can do with switch: Duff's device.
Switch cases have the fallthrough property, so those blocks can have multiple entry edges. Besides that, switch and goto have the same problem that they can enter a scope at the middle. (For instance, C prohibits bypassing the declaration of variably modified type, e.g. int foo[n]; where n is a variable too — this is more or less the same as alloca().)
The main benefit of goto is that it can be used to set up a simple FSM without using a state variable. Which is also the main problem with goto, in case the simple turns out to be "simple".