Node:Example 15, Next:Questions for Chapter 10, Previous:The switch statement, Up:Decisions
Example Listing
#include <stdio.h> int main (); void morse (int); int main () { int digit; printf ("Enter any digit in the range 0 to 9: "); scanf ("%d", &digit); if ((digit < 0) || (digit > 9)) { printf ("Your number was not in the range 0 to 9.\n"); } else { printf ("The Morse code of that digit is "); morse (digit); } return 0; } void morse (int digit) /* print out Morse code */ { switch (digit) { case 0 : printf ("-----"); break; case 1 : printf (".----"); break; case 2 : printf ("..---"); break; case 3 : printf ("...--"); break; case 4 : printf ("....-"); break; case 5 : printf ("....."); break; case 6 : printf ("-...."); break; case 7 : printf ("--..."); break; case 8 : printf ("---.."); break; case 9 : printf ("----."); } printf ("\n\n"); }
The morse
function selects one of the printf
statements
with switch
, based on the integer expression digit
. After
every case
in the switch, a break
statement is used to
jump switch
statement's closing bracket }
. Without
break
, execution would fall through to the next case and
execute its printf
statement.
Here is an example of using fallthrough in a constructive way.
The function yes
accepts input from the user and tests whether it
was 'y' or 'Y'. (The getchar
function is from the standard
library and reads a character of input from the terminal. See getchar.)
#include <stdio.h> int main () { printf ("Will you join the Free Software movement? "); if (yes()) { printf("Great! The price of freedom is eternal vigilance!\n\n"); } else { printf("Too bad. Maybe next life...\n\n"); } return 0; } int yes() { switch (getchar()) { case 'y' : case 'Y' : return 1; default : return 0; } }
If the character is y
, then the program falls through and meets
the statement return 1
. If there were a break
statement
after case 'y'
, then the program would not be able to reach
case 'Y'
unless an actual Y
were typed.
Note: The return
statements substitute for break
in
the above code, but they do more than break out of switch
--
they break out of the whole function. This can be a useful trick.