Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSE1222: Lecture 6The Ohio State University1. Common Mistakes with Conditions (1)  Consider the following code: int age(26); if (age = 18) { cout <<

Similar presentations


Presentation on theme: "CSE1222: Lecture 6The Ohio State University1. Common Mistakes with Conditions (1)  Consider the following code: int age(26); if (age = 18) { cout <<"— Presentation transcript:

1 CSE1222: Lecture 6The Ohio State University1

2 Common Mistakes with Conditions (1)  Consider the following code: int age(26); if (age = 18) { cout << “You are 18.” } else { cout << “You are not 18.”; }  Will output “You are 18.” Why? CSE1222: Lecture 6The Ohio State University2

3 Common Mistakes with Conditions (2) if (age = 18)  The equality operator == is different from the assignment operator =  We are actually assigning age to the value 18  The expression age = 18 evaluates to 18  So the condition (boolean expression) becomes this when executed: if (18) { cout << “You are 18.” }  0 evaluates to false and any other number evaluates to true. Thus, the boolean expression in the condition, i.e. 18, evaluates to true CSE1222: Lecture 6The Ohio State University3

4 else-if Statements (1)  The if-then-else statement allows for at most two alternatives to select The code to execute if the condition succeeds OR The code to execute if the condition fails  What if there are many alternatives to consider? CSE1222: Lecture 6The Ohio State University4

5 else-if Statements (2)  The variable age 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”  How do we handle many alternatives? CSE1222: Lecture 6The Ohio State University5

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; } CSE1222: Lecture 6The Ohio State University6

7  This works!  Is it undesirable? If so, why?  The value in age can only satisfy exactly of these ranges  If the condition at line 1 succeeds, do we need to continue checking the conditions at Lines 2, 3, and 4?  So this is a waste of time that the program could be using doing something more constructive!  Is there a better solution? CSE1222: Lecture 6The Ohio State University7

8 else-if Statements if (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; } CSE1222: Lecture 6The Ohio State University8

9  A much better solution in terms of efficiency  Only check other conditions upon failure!  Anytime a condition triggers true, run the corresponding statements and exit out of the selection structure  The use of else-if statements are perfect for multiple “exclusive selections” such as this CSE1222: Lecture 6The Ohio State University9

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-if s and a chain of if s CSE1222: Lecture 6The Ohio State University10

11 else-if Logic Error if (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; } CSE1222: Lecture 6The Ohio State University11

12 Another Example of else-if if (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 } CSE1222: Lecture 6The Ohio State University12

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 = c" << endl; } } else if (a < c) { cout << "a < c" << endl; } else { cout = c" << endl; } return 0; } CSE1222: Lecture 6The Ohio State University13 What is the output on input: 1 2 3 3 2 1 1 3 2 2 1 3 3 1 2 2 3 1

14 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; CSE1222: Lecture 6The Ohio State University14

15 The switch Statement  An alternative to the if-else chain (but not as general) switch (expression) { case value1:... case value2:... } (See Text) CSE1222: Lecture 6The Ohio State University15

16 CSE1222: Lecture 6The Ohio State University16

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 CSE1222: Lecture 6The Ohio State University17

18 cerrExample.cpp #include // 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; } CSE1222: Lecture 6The Ohio State University18

19 exit()  To use exit(), we need: #include  To help in debugging, use a different number with each exit statement: exit(10); exit(20); exit(30); CSE1222: Lecture 6The Ohio State University19

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; } CSE1222: Lecture 6The Ohio State University20

21 Error Handling  cerr() instead of cout() Messages can be sent to a different place than cout() Forces messages to be printed immediately  exit() instead of return Quits the program and returns control to the operating system Frees up resources associated with the program “return” returns control to any calling program/function CSE1222: Lecture 6The Ohio State University21


Download ppt "CSE1222: Lecture 6The Ohio State University1. Common Mistakes with Conditions (1)  Consider the following code: int age(26); if (age = 18) { cout <<"

Similar presentations


Ads by Google