Friday 17 May 2013

The selective structure: switch


The syntax of the switch statement is a bit peculiar. Its objective is to check several possible constant values for an
expression. Something similar to what we did at the beginning of this section with the concatenation of several if
and else if instructions. Its form is the following:
switch (expression)
{
case constant1:
group of statements 1;
break;
case constant2:
group of statements 2;
break;
.
.
.
default:
default group of statements
}
It works in the following way: switch evaluates expression and checks if it is equivalent to constant1, if it is, it
executes group of statements 1 until it finds the break statement. When it finds this break statement the
program jumps to the end of the switch selective structure.
If expression was not equal to constant1 it will be checked against constant2. If it is equal to this, it will execute
group of statements 2 until a break keyword is found, and then will jump to the end of the switch selective
structure.
Finally, if the value of expression did not match any of the previously specified constants (you can include as
many case labels as values you want to check), the program will execute the statements included after the
default: label, if it exists .
Both of the following code fragments have the same behavior:

The switch statement is a bit peculiar within the C++ language because it uses labels instead of blocks. This
forces us to put break statements after the group of statements that we want to be executed for a specific
condition. Otherwise the remainder statements -including those corresponding to other labels- will also be
executed until the end of the switch selective block or a break statement is reached.
For example, if we did not include a break statement after the first group for case one, the program will not
automatically jump to the end of the switch selective block and it would continue executing the rest of statements
until it reaches either a break instruction or the end of the switch selective block. This makes unnecessary to
include braces { } surrounding the statements for each of the cases, and it can also be useful to execute the same
block of instructions for different possible values for the expression being evaluated. For example:
switch (x) {
case 1:
case 2:
case 3:
cout << "x is 1, 2 or 3";
break;
default:
cout << "x is not 1, 2 nor 3";
}
Notice that switch can only be used to compare an expression against constants. Therefore we cannot put variables
as labels (for example case n: where n is a variable) or ranges (case (1..3):) because they are not valid C++
constants.
If you need to check ranges or values that are not constants, use a concatenation of if and else if statements.

No comments:

Post a Comment