21
CSE202: Lecture 6 The Ohio State University 1 Selection Structures Continued…

Selection Structures Continued…

  • Upload
    dermot

  • View
    46

  • Download
    0

Embed Size (px)

DESCRIPTION

Selection Structures Continued…. Common Mistakes with Conditions (1). Consider the following code: int age(26); if (age = 18) // Line 1 { cout

Citation preview

Page 1: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 1

Selection Structures Continued…

Page 2: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 2

Common Mistakes with Conditions (1)

• Consider the following code:

int age(26);if (age = 18) // Line 1{

cout << “You are 18.”}else{

cout << “You are not 18.”;}

• The output will output “You are 18.” Why?

Page 3: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 3

Common Mistakes with Conditions (2)

• On Line 1: The equality operator is ==, and not =• = is the assignment operator, so what we are actually

doing on line 1 is assigning age to the value of 18.

• So the condition becomes:if (18){

cout << “You are 18.”}

• Now remember the Boolean data type. 0 evaluates to false, and any value other than 0 evaluates to true. Since 18 is not 0, this condition will be satisfied!!

Page 4: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 4

else-if Statements (1)

• The if-then-else statements that we have seen thus far allows us to select from at most two alternatives.– The code to execute if the condition succeeds– The code to execute if the condition fails

• What if there are many alternatives to consider?

Page 5: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 5

else-if Statements (2)

• Consider this example:

• We have a variable, age, that contains a person’s age.– If 1 ≤ age ≤ 12, print “You are very young”– If 13 ≤ age ≤ 19, print “You are a teenager”– If 20 ≤ age ≤ 39, print “You are getting old”– If 40 ≤ age, print “You are over the hill”

Page 6: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 6

Solve It with What We Know (1)if (1 <= age && age <= 12)// Line 1{

cout << “You are a child” << endl;}if (13 <= age && age <= 19) // Line 2{

cout << “You are a teenager” << endl;}if (age <= 20 && age <= 39) // Line 3{

cout << “You are getting old” << endl;}if (40 <= age) // Line 4{

cout << “You are over the hill” << endl;}

Page 7: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 7

• This works, but why is it undesirable?

• If the condition at line 1 succeeds, do we need to continue checking the conditions at Lines 2, 3, and 4? Not in this case.

• So this is a waste of time that the program could be using doing something more constructive! Here’s a better solution:

FALSE

FALSE

FALSE

FALSE

cout“...child”

TRUE

TRUE

TRUEcout

“...old”

TRUEcout

“...hill”

...

Between 1 and 12?

Between 12 and 19?

Between 20 and 39?

40 and over?

cout“...teen”

Page 8: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 8

else-if Statementsif (1 <= age && age <= 12) // Line 1{

cout << “You are a child” << endl;}else if (13 <= age && age <= 19) // Line 2{

cout << “You are a teenager” << endl;}else if (20 <= age && age <= 39) // Line 3{

cout << “You are getting old” << endl;}else if (40 <= age) // Line 4{

cout << “You are over the hill” << endl;}

Page 9: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 9

• A much better solution: only check other conditions upon failure!

• Anytime a condition triggers true, run the corresponding statements and continue out of the selection structure.

• The use of else-if statements are perfect for multiple “exclusive selections” such as this.

FALSE

FALSE

FALSE

FALSE

cout“...child”

TRUEcout

“...teen”

TRUE

TRUEcout

“...old”

TRUEcout

“...hill”

...

Between 1 and 12?

Between 12 and 19?

Between 20 and 39?

40 and over?

Page 10: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 10

Notes about else-ifs

• Like else statements, else-if statements are optional, but ALWAYS sandwiched in between the if- and the else statement.

• There is no limit to the number of else-if statements succeeding an if-statement.

• It is important to realize the difference between a chain of else-ifs and a chain of ifs.

Page 11: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 11

else-if Errorif (1 <= age && age <= 12) // Line 1{

cout << “You are a child” << endl;}else if (13 <= age && age <= 29) // Line 2 ERROR{

cout << “You are a teenager” << endl;}else if (20 <= age && age <= 39) // Line 3{

cout << “You are getting old” << endl;}else if (40 <= age) // Line 4{

cout << “You are over the hill” << endl;}

Page 12: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 12

Another Example of else-ifif (a > 0){

//do something if condition succeeds}else if (b < 3){

//here, we know a ≤ 0 because the first condition //failed, now we also test for b < 3 do something //if condition succeeds

}else{

//here, we know neither conditions were met//do something else, if necessary

}

Page 13: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 13

ifExample.cpp...int main(){ int a(0), b(0), c(0);

cout << "Enter a, b, c: "; cin >> a >> b >> c;

if (a < b) { if (b < c) { cout << "b < c" << endl; } else { cout << "b >= c" << endl; } } else if (a < c) { cout << "a < c" << endl; } else { cout << "a >= c" << endl; }

return 0;}

What is the output on input:

1 2 3

3 2 1

1 3 2

2 1 3

3 1 2

2 3 1

Page 14: Selection Structures Continued…

Exercise

• Write if-else-if statements which print:– “You are too young to drive.” if age 14;– “You can get a learners permit.” if age = 15;– “You pay more for insurance.” if 16 age

25;– “You can drive.” if age > 25;

CSE202: Lecture 6 The Ohio State University 14

Page 15: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 15

The switch Statement

• An alternative to the if-else chain, but not as general.

switch (expression){

case value1:...

case value2:...

...}

(See text.)

Page 16: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 16

cerr and exit()

Page 17: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 17

Error Handling

• if-then statements are often used to detect and handle errors.

• Use cerr() instead of cout() for error output messages.

• Use exit() instead of return to quit a program on detecting an error.

Page 18: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 18

cerrExample.cpp#include <cstdlib> // File cstdlib contains exit()...int main(){ double x(0.0);

cout << "Enter non-negative value: "; cin >> x;

if (x < 0) { // Use cerr instead of cout. Use exit instead of return. cerr << "Error: Illegal negative value: " << x << endl; exit(20); }

cout << "sqrt(" << x << ") = " << sqrt(x) << endl;

return 0;}

Page 19: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 19

exit()

• To use exit(), we need:

#include <cstdlib>

• To help in debugging, use a different number with each exit statement:

exit(10);

exit(20);

exit(30);

Page 20: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 20

cerrExample2.cpp...int main(){ double x(0.0);

cout << "Enter non-negative value: "; cin >> x;

if (x < 0) { // Use cerr instead of cout. cerr << "Warning: Illegal negative value: " << x << endl; cerr << "Changing " << x << " to " << -x << endl;

x = -x; }

cout << "sqrt(" << x << ") = " << sqrt(x) << endl;

return 0;}

Page 21: Selection Structures Continued…

CSE202: Lecture 6 The Ohio State University 21

Error Handling

• cerr() instead of cout(): cerr() messages can be sent to a different place than cout(). cerr() also forces messages to be printed immediately.

• exit() instead of return: exit() quits the program and returns control to the operating system. exit() frees up resources associated with the program. “return” returns control to any calling program/function.