Chapter 2
Flow of Control
Copyright © 2017 Pearson Education, Ltd.
All rights reserved.
Learning Objectives
• Boolean Expressions
– Building, Evaluating & Precedence Rules
• Branching Mechanisms
– if-else
– switch
– Nesting if-else
• Loops
– While, do-while, for
– Nesting loops
• Introduction to File Input
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-2
Boolean Expressions:
Display 2.1 Comparison Operators
• Logical Operators
– Logical AND (&&)
– Logical OR (||)
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-3
Evaluating Boolean Expressions
• Data type bool
– Returns true or false
– true, false are predefined library consts
• Truth tables
– Display 2.2 next slide
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-4
Evaluating Boolean Expressions: Display 2.2
Truth Tables
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-5
Display 2.3
Precedence of Operators (1 of 4)
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-6
Display 2.3
Precedence of Operators (2 of 4)
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-7
Display 2.3
Precedence of Operators (3 of 4)
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-8
Display 2.3
Precedence of Operators (4 of 4)
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-9
Precedence Examples
• Arithmetic before logical
– x + 1 > 2 || x + 1 < -3 means:
• (x + 1) > 2 || (x + 1) < -3
• Short-circuit evaluation
– (x >= 0) && (y > 1)
– Be careful with increment operators!
• (x > 1) && (y++)
• Integers as boolean values
– All non-zero values à true
– Zero value à false
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-10
Strong Enum
• C++11 introduces strong enums or enum
classes
– Does not act like an integer
– Examples
enum class Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };
enum class Weather { Rain, Sun };
Days d = Days::Tue;
Weather w = Weather::Sun;
– Illegal: if (d == 0)
– Legal: if (d == Days::Wed)
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-11
Branching Mechanisms
• if-else statements
– Choice of two alternate statements based
on condition expression
– Example:
if (hrs > 40)
grossPay = rate*40 + 1.5*rate*(hrs-40);
else
grossPay = rate*hrs;
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-12
if-else Statement Syntax
• Formal syntax:
if (<boolean_expression>)
<yes_statement>
else
<no_statement>
• Note each alternative is only
ONE statement!
• To have multiple statements execute in
either branch à use compound statement
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-13
Compound/Block Statement
• Only "get" one statement per branch
• Must use compound statement { }
for multiples
– Also called a "block" stmt
• Each block should have block statement
– Even if just one statement
– Enhances readability
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-14
Compound Statement in Action
• Note indenting in this example:
if (myScore > yourScore)
{
cout << "I win!\n";
wager = wager + 100;
}
else
{
cout << "I wish these were golf scores.\n";
wager = 0;
}
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-15
Common Pitfalls
• Operator "=" vs. operator "=="
• One means "assignment" (=)
• One means "equality" (==)
– VERY different in C++!
– Example:
if (x = 12) ßNote operator used!
Do_Something
else
Do_Something_Else
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-16
The Optional else
• else clause is optional
– If, in the false branch (else), you want "nothing" to happen,
leave it out
– Example:
if (sales >= minimum)
salary = salary + bonus;
cout << "Salary = %" << salary;
– Note: nothing to do for false condition, so there is no else
clause!
– Execution continues with cout statement
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-17
Nested Statements
• if-else statements contain smaller statements
– Compound or simple statements (we’ve seen)
– Can also contain any statement at all, including another if-
else stmt!
– Example:
if (speed > 55)
if (speed > 80)
cout << "You’re really speeding!";
else
cout << "You’re speeding.";
• Note proper indenting!
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-18
Multiway if-else
• Not new, just different indenting
• Avoids "excessive" indenting
– Syntax:
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-19
Multiway if-else Example
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-20
The switch Statement
• A statement for controlling multiple branches
• Can do the same thing with if statements but
sometimes switch is more convenient
• Uses controlling expression which returns bool
data type (true or false)
• Syntax:
– Next slide
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-21
switch Statement Syntax
The controlling expression must be integral! This includes char.
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-22
The switch Statement in Action
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-23
The switch: multiple case labels
• Execution "falls thru" until break
– switch provides a "point of entry"
– Example:
case 'A':
case 'a':
cout << "Excellent: you got an
"A"!\n";
break;
case 'B':
case 'b':
cout << "Good: you got a "B"!\n";
break;
– Note multiple labels provide same "entry"
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-24
switch Pitfalls/Tip
• Forgetting the break;
– No compiler error
– Execution simply "falls thru" other cases until
break;
• Biggest use: MENUs
– Provides clearer "big-picture" view
– Shows menu structure effectively
– Each branch is one menu choice
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-25
switch Menu Example
• Switch stmt "perfect" for menus:
switch (response)
{
case 1:
// Execute menu option 1
break;
case 2:
// Execute menu option 2
break;
case 3:
// Execute menu option 3
break;
default:
cout << "Please enter valid response.";
}
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-26
Conditional Operator
• Also called "ternary operator"
– Allows embedded conditional in expression
– Essentially "shorthand if-else" operator
– Example:
if (n1 > n2)
max = n1;
else
max = n2;
– Can be written:
max = (n1 > n2) ? N1 : n2;
• "?" and ":" form this "ternary" operator
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-27
Loops
• 3 Types of loops in C++
– while
• Most flexible
• No "restrictions"
– do-while
• Least flexible
• Always executes loop body at least once
– for
• Natural "counting" loop
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-28
while Loops Syntax
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-29
while Loop Example
• Consider:
count = 0; // Initialization
while (count < 3) // Loop Condition
{
cout << "Hi "; // Loop Body
count++; // Update expression
}
– Loop body executes how many times?
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-30
do-while Loop Syntax
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-31
do-while Loop Example
• count = 0; // Initialization
do
{
cout << "Hi "; // Loop Body
count++; // Update expression
} while (count < 3); // Loop Condition
– Loop body executes how many times?
– do-while loops always execute body at least once!
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-32
while vs. do-while
• Very similar, but…
– One important difference
• Issue is "WHEN" boolean expression is checked
• while: checks BEFORE body is executed
• do-while: checked AFTER body is executed
• After this difference, they’re
essentially identical!
• while is more common, due to it’s
ultimate "flexibility"
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-33
Comma Operator
• Evaluate list of expressions, returning
value of the last expression
• Most often used in a for-loop
• Example:
first = (first = 2, second = first + 1);
– first gets assigned the value 3
– second gets assigned the value 3
• No guarantee what order expressions will
be evaluated.
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-34
for Loop Syntax
for (Init_Action; Bool_Exp; Update_Action)
Body_Statement
• Like if-else, Body_Statement can be
a block statement
– Much more typical
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-35
for Loop Example
• for (count=0;count<3;count++)
{
cout << "Hi "; // Loop Body
}
• How many times does loop body execute?
• Initialization, loop condition and update all
"built into" the for-loop structure!
• A natural "counting" loop
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-36
Loop Issues
• Loop’s condition expression can be ANY boolean
expression
• Examples:
while (count<3 && done!=0)
{
// Do something
}
for (index=0;index<10 && entry!=-99)
{
// Do something
}
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-37
Loop Pitfalls: Misplaced ;
• Watch the misplaced ; (semicolon)
– Example:
while (response != 0) ;ß
{
cout << "Enter val: ";
cin >> response;
}
– Notice the ";" after the while condition!
• Result here: INFINITE LOOP!
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-38
Loop Pitfalls: Infinite Loops
• Loop condition must evaluate to false at
some iteration through loop
– If not à infinite loop.
– Example:
while (1)
{
cout << "Hello ";
}
– A perfectly legal C++ loop à always infinite!
• Infinite loops can be desirable
– e.g., "Embedded Systems"
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-39
The break and continue Statements
• Flow of Control
– Recall how loops provide "graceful" and clear flow of
control in and out
– In RARE instances, can alter natural flow
• break;
– Forces loop to exit immediately.
• continue;
– Skips rest of loop body
• These statements violate natural flow
– Only used when absolutely necessary!
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-40
Nested Loops
• Recall: ANY valid C++ statements can be
inside body of loop
• This includes additional loop statements!
– Called "nested loops"
• Requires careful indenting:
for (outer=0; outer<5; outer++)
for (inner=7; inner>2; inner--)
cout << outer << inner;
– Notice no { } since each body is one statement
– Good style dictates we use { } anyway
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-41
Introduction to File Input
• We can use cin to read from a file in a manner
very similar to reading from the keyboard
• Only an introduction is given here, more
details are in chapter 12
– Just enough so you can read from text files and
process larger amounts of data that would be too
much work to type in
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-42
Opening a Text File
• Add at the top
#include <fstream>
using namespace std;
• You can then declare an input stream just as you
would declare any other variable.
ifstream inputStream;
• Next you must connect the inputStream variable to a
text file on the disk.
inputStream.open("filename.txt");
• The “filename.txt” is the pathname to a text file or a
file in the current directory
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-43
Reading from a Text File
• Use
inputStream >> var;
• The result is the same as using cin >> var
except the input is coming from the text file
and not the keyboard
• When done with the file close it with
inputStream.close();
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-44
File Input Example (1 of 2)
• Consider a text file named player.txt with the
following text
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-45
File Input Example (2 of 2)
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-46
Summary 1
• Boolean expressions
– Similar to arithmetic à results in true or false
• C++ branching statements
– if-else, switch
– switch statement great for menus
• C++ loop statements
– while
– do-while
– for
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-47
Summary 2
• do-while loops
– Always execute their loop body at least once
• for-loop
– A natural "counting" loop
• Loops can be exited early
– break statement
– continue statement
– Usage restricted for style purposes
• Reading from a text file is similar to reading
from cin
Copyright © 2017 Pearson Education, Ltd. All rights reserved. 2-48