Composing terminal control sequences
I prefer the switch statement.  Here are my reasons:


You can move each return statement onto the same line as the case statement to make the switch statement just as short as the ternary version.
The ternary version is harder to read (at least for me) due to the more ? : == and () involved.  This is not a big deal though.
I find it easier to make subtle syntax errors (not compile time errors) with the ternary operator.  For example:

x = y &amp; mask ? 8 : 4;
a = 5 + (b &gt; c) ? b : c;


Of course you can avoid this by using the correct parentheses:

x = (y &amp; mask) ? 8 : 4;
a = 5 + ((b &gt; c) ? b : c);


It's just that sometimes these kind of expressions appear across multiple lines and it gets hard to visualize which part is which.
A compiler might be able to do a better job optimizing a switch statement than the ternary if-else ladder.  For example, if your switch cases are in consecutive order (such as 0..N), then the compiler can use a jump table to simplify the switch into:

// (pseudocode)
offset = jumpTable[index];
goto offset;