Download presentation
Presentation is loading. Please wait.
Published byJanice Wilcox Modified over 8 years ago
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
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.