The C “switch” Statement

Slides:



Advertisements
Similar presentations
CMSC 104, Version 8/061L15Switch.ppt The switch Statement Topics Multiple Selection switch Statement char Data Type and getchar( ) EOF constant Reading.
Advertisements

CMSC 104, Version 8/061L22Arrays1.ppt Arrays, Part 1 of 2 Topics Definition of a Data Structure Definition of an Array Array Declaration, Initialization,
Spring 2005, Gülcihan Özdemir Dağ Lecture 4, Page 1 BIL104E: Introduction to Scientific and Engineering Computing, Spring Lecture 4 Outline 4.0 Reading.
Spring 2005, Gülcihan Özdemir Dağ Lecture 3, Page 1 BIL104E: Introduction to Scientific and Engineering Computing, Spring Lecture 3 Outline 3.1 Introduction.
CP104 Introduction to Programming File I/O Lecture 33 __ 1 File Input/Output Text file and binary files File Input/output File input / output functions.
CMSC 104, Version 8/061L11Relational&LogicalOps.ppt Relational and Logical Operators Topics Relational Operators and Expressions The if Statement The if-else.
Assignment Operators = +=-= *= /=%= Statement Equivalent Statement a = a + 2 ;a += 2 ; a = a - 3 ;a -= 3 ; a = a * 2 ;a *= 2 ; a = a / 4 ; a /= 4 ; a =
CMSC 104, Lecture 171 More Loops Topics l Counter-Controlled (Definite) Repetition l Event-Controlled (Indefinite) Repetition l for Loops l do-while Loops.
CMSC 104, Version 9/011 The switch Statement Topics Multiple Selection switch Statement char Data Type and getchar( ) EOF constant Reading Section 4.7,
CMSC 104, Version 9/011 More Loops Topics Counter-Controlled (Definite) Repetition Event-Controlled (Indefinite) Repetition for Loops do-while Loops Choosing.
CMSC 1041 More Loops ‘for’ loops and ‘do-while’ loops.
Variables in C Topics  Naming Variables  Declaring Variables  Using Variables  The Assignment Statement Reading  Sections
CMSC 104, Version 9/011 Relational and Logical Operators Topics Relational Operators and Expressions The if Statement The if-else Statement Nesting of.
CMSC 104, Version 8/061L09VariablesInC.ppt Variables in C Topics Naming Variables Declaring Variables Using Variables The Assignment Statement Reading.
UMBC CMSC 104 – Section 01, Fall 2016
Chapter 3 Control Statements
Chapter 4 C Program Control Part I
2008/11/19: Lecture 18 CMSC 104, Section 0101 John Y. Park
CHAPTER 4 Selection CSEG1003 Introduction to Computing
ICS103 Programming in C Lecture 3: Introduction to C (2)
A First Book of ANSI C Fourth Edition
2008/10/22: Lecture 12 CMSC 104, Section 0101 John Y. Park
2008/11/10: Lecture 16 CMSC 104, Section 0101 John Y. Park
2011/11/20: Lecture 15 CMSC 104, Section 4 Richard Chang
The C “switch” Statement
Relational & Logical Operators
2008/11/05: Lecture 15 CMSC 104, Section 0101 John Y. Park
Arrays, Part 1 of 2 Topics Definition of a Data Structure
2008/11/24: Lecture 19 CMSC 104, Section 0101 John Y. Park
The while Looping Structure
2008/10/27: Lecture 13 CMSC 104, Section 0101 John Y. Park
2008/10/01: Lecture 8 CMSC 104, Section 0101 John Y. Park
2008/11/24: Lecture 19 CMSC 104, Section 0101 John Y. Park
Relational and Logical Operators
Final Exam Final Exam: Thursday Dec 13th, 2001 at 8:30 pm in SS-111, the regular classroom.
Variables in C Topics Naming Variables Declaring Variables
2008/10/22: Lecture 12 CMSC 104, Section 0101 John Y. Park
Relational and Logical Operators
INC 161 , CPE 100 Computer Programming
The switch Statement Topics Multiple Selection switch Statement
The switch Statement Topics Multiple Selection switch Statement
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Relational & Logical Operators, if and switch Statements
Relational and Logical Operators
2008/10/27: Lecture 13 CMSC 104, Section 0101 John Y. Park
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Arrays I Handling lists of data.
More Loops Topics Counter-Controlled (Definite) Repetition
More Loops Topics Counter-Controlled (Definite) Repetition
Relational and Logical Operators
More Loops Topics Counter-Controlled (Definite) Repetition
More Loops Topics Counter-Controlled (Definite) Repetition
More Loops Topics Counter-Controlled (Definite) Repetition
Variables in C Topics Naming Variables Declaring Variables
The switch Statement Topics Multiple Selection switch Statement
2008/10/01: Lecture 8 CMSC 104, Section 0101 John Y. Park
2008/11/05: Lecture 15 CMSC 104, Section 0101 John Y. Park
2008/11/19: Lecture 18 CMSC 104, Section 0101 John Y. Park
Variables in C Topics Naming Variables Declaring Variables
Arrays, Part 1 of 2 Topics Definition of a Data Structure
Variables in C Topics Naming Variables Declaring Variables
UMBC CMSC 104 – Section 01, Fall 2016
Arrays, Part 1 of 2 Topics Definition of a Data Structure
More Loops Topics Counter-Controlled (Definite) Repetition
More Loops Topics Counter-Controlled (Definite) Repetition
Switch Case Structures
Variables in C Topics Naming Variables Declaring Variables
Chapter 13 Control Structures
Presentation transcript:

The C “switch” Statement 2008/10/29: Lecture 14 CMSC 104, Section 0101 John Y. Park [Based on dblock spr’06lecture, slightly modified]

The switch Statement Topics Multiple Selection switch Statement char Data Type and getchar( ) Reading Section 4.7, 4.12

Multiple Selection So far, we have only seen binary selection. if ( age >= 18 ) { printf(“Vote!\n”) ; } if ( age >= 18 ) { printf(“Vote!\n”) ; } else printf(“Maybe next time!\n”) ;

Multiple Selection (con’t) Sometimes it is necessary to branch in more than two directions. We do this via multiple selection. The multiple selection mechanism in C is the switch statement.

Multiple Selection with if if (day == 0 ) { printf (“Sunday”) ; } if (day == 1 ) { printf (“Monday”) ; if (day == 2) { printf (“Tuesday”) ; if (day == 3) { printf (“Wednesday”) ; (continued) if (day == 4) { printf (“Thursday”) ; } if (day == 5) { printf (“Friday”) ; if (day == 6) { printf (“Saturday”) ; if ((day < 0) || (day > 6)) { printf(“Error - invalid day.\n”) ;

Multiple Selection with if-else if (day == 0 ) { printf (“Sunday”) ; } else if (day == 1 ) { printf (“Monday”) ; } else if (day == 2) { printf (“Tuesday”) ; } else if (day == 3) { printf (“Wednesday”) ; } else if (day == 4) { printf (“Thursday”) ; } else if (day == 5) { printf (“Friday”) ; } else if (day == 6) { printf (“Saturday”) ; } else { printf (“Error - invalid day.\n”) ; } This if-else structure is more efficient than the corresponding if structure. Why? Are there any other functional differences?

Multiple Selection with if-else if (day == 0 ) { printf (“Sunday”) ; day = 3; } if (day == 1 ) { printf (“Monday”) ; if (day == 2) { printf (“Tuesday”) ; if (day == 3) { printf (“Wednesday”) ; if (day == 4) { printf (“Thursday”) ; … if (day == 0 ) { printf (“Sunday”) ; day = 3; } else if (day == 1 ) { printf (“Monday”) ; } else if (day == 2) { printf (“Tuesday”) ; } else if (day == 3) { printf (“Wednesday”) ; } else if (day == 4) { printf (“Thursday”) ; } else if (…) … vs.

The switch Multiple-Selection Structure switch ( integer expression ) { case constant1 : statement(s) break ; case constant2 : . . . default: : }

switch Statement Details The last statement of each case in the switch should almost always be a break. The break causes program control to jump to the closing brace of the switch structure. Without the break, the code flows into the next case. This is almost never what you want. A switch statement will compile without a default case, but always consider using one.

Good Programming Practices Include a default case to catch invalid data. Inform the user of the type of error that has occurred (e.g., “Error - invalid day.”). If appropriate, display the invalid value. If appropriate, terminate program execution (discussed in CMSC 201).

switch Example switch ( day ) { case 0: printf (“Sunday\n”) ; break ; case 1: printf (“Monday\n”) ; case 2: printf (“Tuesday\n”) ; case 3: printf (“Wednesday\n”) ; case 4: printf (“Thursday\n”) ; case 5: printf (“Friday\n”) ; case 6: printf (“Saturday\n”) ; default: printf (“Error -- invalid day.\n”) ; } Is this structure more efficient than the equivalent nested if-else structure?

Why Use a switch Statement? A switch statement can be more efficient than an if-else. A switch statement may also be easier to read. Also, it is easier to add new cases to a switch statement than to a nested if-else structure.

The char Data Type The char data type holds a single character. char ch; Example assignments: char grade, symbol; grade = ‘B’; symbol = ‘$’; The char is held as a one-byte integer in memory. The ASCII code is what is actually stored, so we can use them as characters or integers, depending on our need.

The char Data Type (con’t) Use scanf (“%c”, &ch) ; to read a single character into the variable ch. (Note that the variable does not have to be called “ch”.”) printf(“%c”, ch) ; to display the value of a character variable.

char Example If the user entered an A, the output would be: #include <stdio.h> int main ( ) { char ch ; printf (“Enter a character: “) ; scanf (“%c”, &ch) ; printf (“The value of %c is %d.\n”, ch, ch) ; return 0 ; } If the user entered an A, the output would be: The value of A is 65.

The getchar ( ) Function The getchar( ) function is found in the stdio library. The getchar( ) function reads one character from stdin (the standard input buffer) and returns that character’s ASCII value. The value can be stored in either a character variable or an integer variable.

getchar ( ) Example If the user entered an A, the output would be: #include <stdio.h> int main ( ) { char ch ; /* int ch would also work! */ printf (“Enter a character: “) ; ch = getchar( ) ; /*same as scanf(“%c”, &ch); */ printf (“The value of %c is %d.\n”, ch, ch) ; return 0 ; } If the user entered an A, the output would be: The value of A is 65.

Problems with Reading Characters When getting characters, whether using scanf( ) or getchar( ), realize that you are reading only one character. What will the user actually type? The character he/she wants to enter, followed by pressing ENTER. So, the user is actually entering two characters, his/her response and the newline character. Unless you handle this, the newline character will remain in the stdin stream causing problems the next time you want to read a character. Another call to scanf() or getchar( ) will remove it.

Improved Character Example #include <stdio.h> int main ( ) { char ch, newline ; printf (“Enter a character: “) ; scanf(“%c”, &ch) ; scanf(“%c”, &newline); printf (“The value of %c is %d.\n”, ch, ch) ; printf (“Enter another character: “) ; return 0 ; }

Additional Concerns with Garbage in stdin When we were reading integers using scanf( ), we didn’t seem to have problems with the newline character, even though the user was typing ENTER after the integer. That is because scanf( ) was looking for the next integer and ignored the newline (whitespace). If we use scanf (“%d”, &num); to get an integer, the newline is still stuck in the input stream. If the next item we want to get is a character, whether we use scanf( ) or getchar( ), we will get the newline. We have to take this into account and remove it.