4.2. Selection Statements¶
4.2.1. if – else¶
We discussed this in Topic 1. Recall the basic form of
if statements:
if( expr) statement;
if( expr ) {
statement1;
statement2;
}
if( expr ) {
code block;
} else {
code block;
}
Also, recall the dangers of the “dangling” or ambiguous else.
if( expr ) if( expr ) statement; else statement;
4.2.2. The goto statement¶
The goto statement is strongly discouraged.
label: begin ... if( attempts == 0 ) goto begin;
The only possible argument for a goto is if the code is nested
several layers deep into loops and an immediate switch to elsewhere
is needed. Even here, other methods achieve the same result.
4.2.3. The break and continue statements¶
break and continue provide additional controls for
loops. [1]
break tells the program counter to exit the loop and continue
executing the code following the loop.
continue is an instruction to stop with the current execution of
the loop body and skip to the end of the body of the loop and
continue as if the bottom of the loop had been reached via normal
program execution.
4.2.4. The switch statement¶
The switch is a multi-way conditional statement generalizing the
if – else statement.
switch( val ) { case 1: counter++; break; case 2: case 3: counter--; break; default: counter = 0; }
4.2.5. Conditional Operator¶
The operator
? :is a ternary operator. It takes three variables or expressions as its operands.Syntax:
expr1 ? expr2: expr3First,
expr1is evaluated, if it is true (non-zero), then the whole expression reduces toexpr2, which is then evaluated.If
expr1is false (zero), then the whole expression reduces toexpr3, which is then evaluated.
The following two expressions are identical.
if (y < z) x = y; else x = z; x = (y < z) ? y : z;
Here is another example.
int a = 1, b = 2; double x = 7.07, y; printf( "%d\n", ((a == b) ? a -1 : b + 1)); --- 3 printf( "%lf\n", ((a-b) < 0 ? x : a + b)); --- 7.07 printf( "%lf\n", ((a-b) > 0 ? x : a + b)); --- 3.0
In the last example, because of the mixed data type in the conditional operation, all data types are converted to double type.
Footnotes