ece 264 object-oriented software development instructor: dr. honggang wang spring 2013 lecture 5:...

21
ECE 264 Object-Oriented Software Development Instructor: Dr. Honggang Wang Spring 2013 Lecture 5: Continuing with C++ I/O Basics

Upload: carmel-austin

Post on 13-Dec-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

ECE 264Object-Oriented

Software Development

Instructor: Dr. Honggang WangSpring 2013

Lecture 5: Continuing with C++ I/O Basics

Lecture outline Announcements/reminders

Lab 1- Monday session: due 5:00 pm, 02/06 Lab1 – Wednesday Session: due 5:00 pm, 02/01 Lab attendance is required, students must sign your

name on the attendance sheet TA: Justin R Lacle ([email protected]) TA Office hour: 11:00 -12:00 pm, Monday and

Wednesday Continue with C++ basics

Review basic I/O Work through examples Applying design cycle to ECE 264

04/18/23 ECE 264: Lecture 4 2

Review Covered basic C++ program structure—very similar to C! Namespaces

Introduced std namespace—includes cin, cout, etc. Could include entire namespace: using namespace std; Or, just include members being used: using std::cout;

Output (cout) streams Can output multiple values in same statement

cout << “x=“ << x << “, y=“ << y << endl; Input (cin) streams

Use cin to read values into variables E.g., cin >> x; Skips whitespace characters Input value must be compatible with type of x

04/18/23 ECE 264: Lecture 4 3

4

Another C++ Program: Adding Integers Variable

Is a location in memory where a value can be stored Common data types (fundamental, primitive or built-in)

int – for integer numbers char – for characters double – for floating point numbers

Declare variables with data type and name before use int integer1; int integer2; int sum;

04/18/23 ECE 264: Lecture 4

Basic program 2// Adapted from figure 2.5 in text// Addition program that displays the sum of two integers.#include <iostream>using std::cout;using std::cin;using std::endl;

int main() { // variable declarations int number1; int number2; int sum;

// prompt user for data and read into appropriate variables cout << "Enter first integer: ";

cin >> number1; cout << "Enter second integer: ";

cin >> number2; sum = number1 + number2; // add the numbers; store result in sum

cout << "Sum is " << sum << endl; // display sum; end line

return 0; // indicate that program ended successfully} // end function main

04/18/23 ECE 264: Lecture 4 5

04/18/23 ECE 264: Lecture 4 6

output1,24.5 cm_

//Example 1: Determine the output#include <iostream>using std::cout;using std::cin;using std::endl;

#include <string>using std::string;

int main() {int i, j;double x;string units = " cm";cin >> i >> j;cin >> x;cout << "output \n";cout << i << ',' << j << endl

<< x << units << endl;return 0;

}

//Input stream is:1 2 4.5

04/18/23 ECE 264: Lecture 4 7

//Example 2: Determine the output#include <iostream>using std::cout;using std::cin;using std::endl;

int main() {int i, j;double x, y;cin >> i >> j >> x >> y;cout << "First output " << endl;cout << i << ',' << j << ',' << x

<< ',' << y << endl;cin >> x >> y >> i >> j;cout << "Second output" << endl;cout << i << ',' << j << ',' << x

<< ',' << y << endl;return 0;

}

//Input stream is:1 23.4 52 3 3.4 7

First output1,2,3.4,5Second output3,2,2,3_

Example 2 (cont.) Issues with second output

Before highlighted lines i = 1, j = 2, x = 3.4, y = 5

Second cin appears to assign:x = 2, y = 3, i = 3.4, j = 7

But printing i, j, x, and y in order yields: 3,2,2,3 j never gets value 7—what happens?

i and j are integers cin reads 3 into i and then stops at decimal point cin can’t skip non-whitespace character j doesn’t

change

04/18/23 ECE 264: Lecture 4 8

04/18/23 ECE 264: Lecture 4 9

Characters and input >> discards leading whitespace get() method used to input whitespace characters

Optional second argument allows you to input multiple characters Default is 1 cin.get(buffer, 10) reads 10 characters from input

Example:int x;char ch;cin >> x >> ch;cin >> x;

cin.get(ch); x ch

x chInput stream:45 c39b

45 ‘c’

39 ‘\n ’

Characters and input (cont.) Reading an entire line: getline(char[], num) Reads up to num characters on a line Stops at newline character Example: cin.getline(buffer, 10); Must be careful if input is read using stream

extraction operator ( >> ) as well as getline()

04/18/23 ECE 264: Lecture 4 10

getline exampleint numR;char name[20];cin >> numR;cin.getline(name, 20);

If input is:6Room 12

what values do numR and name hold? numR = 6 name = “\n” why?

cin >> numR stops at any whitespace character \n cin.getline(name,20) starts with next char, ends at newline

04/18/23 ECE 264: Lecture 4 11

Fixing getline example Skipping whitespace characters: ignore(num) Discards num characters from input stream

without storing them To fix previous example:

int numR;char name[20];cin >> numR;cin.ignore(1);cin.getline(name, 20);

04/18/23 ECE 264: Lecture 4 12

Formatted output Recall earlier example:

int i, j;double x, y;...cin >> x >> y >> i >> j;cout << "Second output" << endl;cout << i << ',' << j << ',' << x << ',' << y << endl;

x and y are of type double … ... but second cout prints 2 & 3 for x & y What if we want to

Always print decimal point? Always show certain number of places after point? Force output to align within columns of a particular width? Change the number base being printed?

Use stream manipulators: objects affecting output stream Already seen one of these: endl To use others, must add #include <iomanip>

May also use stream functions: functions associated with cin/cout

04/18/23 ECE 264: Lecture 4 13

Integral Stream Base: dec, oct, hex and setbase Change a stream’s integer base by inserting

manipulators hex manipulator

Sets the base to hexadecimal (base 16) oct manipulator

Sets the base to octal (base 8) dec manipulator

Resets the base to decimal setbase parameterized stream manipulator

Takes one integer argument: 10, 8 or 16 Sets the base to decimal, octal or hexadecimal Requires the inclusion of the <iomanip> header file

Stream base values are sticky Remain until explicitly changed to another base value

04/18/23 ECE 264: Lecture 4 14

Example 1: bases// Fig. 15.8: Fig15_08.cpp // Using stream manipulators hex, oct, dec and setbase.

#include <iostream>using std::cin;using std::cout;using std::dec;using std::endl;using std::hex;using std::oct;

#include <iomanip>using std::setbase;

04/18/23 ECE 264: Lecture 4 15

Example 1: bases (cont.)int main(){ int number;

cout << "Enter a decimal number: "; cin >> number; // input number

// use hex stream manipulator to show hexadecimal number cout << number << " in hexadecimal is: " << hex << number << endl;

// use oct stream manipulator to show octal number cout << dec << number << " in octal is: " << oct << number << endl;

// use setbase stream manipulator to show decimal number cout << setbase( 10 ) << number << " in decimal is: " << number << endl; return 0;} // end main

04/18/23 ECE 264: Lecture 4 16

Example 2: bases//Example: Determine the output#include <iostream>using std::cout;using std::endl;using std::hex;using std::oct;int main(){

int i;for (i = 0; i <= 32; i += 8) {

cout << "Decimal: " << i << endl;cout << oct << "Octal: " << i << endl;if ((i % 16) == 0)

cout << hex << "Hexadecimal: " << i << endl; }return 0;

}

04/18/23 ECE 264: Lecture 4 17

Example 2: bases (cont.) Output:Decimal: 0Octal: 0Hexadecimal: 0Decimal: 8Octal: 10Decimal: 20Octal: 20Hexadecimal: 10Decimal: 18Octal: 30Decimal: 40Octal: 40Hexadecimal: 20

04/18/23 ECE 264: Lecture 4 18

What’s the problem? Base settings are

sticky How would we fix it?

Insert “dec” into the cout statement for the decimal values

Questions: What is the difference between endl and \n Std:: endl

Insert a new line + flush the stream buffer \n

Insert a new line In most cases

No much difference Notes: If you are interested in faster screen

output, using \n is faster because flushing the output takes a little time.

04/18/23 ECE 264: Lecture 4 19

Applying life cycle to ECE 264 How does the software cycle apply to ECE 264?

Project: You’ll be working in teams and taking a project through these stages

Labs: Don’t just sit down and start coding! Read the lab handout will give you, in essence

Requirements: what should your program be able to do? Hints about design / programming:

How might you organize your program? How might you implement that design?

Basic system tests: given particular inputs to your “system” (program), what should the output look like?

Identify each of those parts as you read the handout Based on what you read, formulate a high-level design

Given requirements, how are we going to organize the code? What function(s) do we need? What class(es) might we use? We will often provide hints to point you in the right direction

Later labs may ask you to use UML to formalize parts of your design Once high-level design is done and you have a sense of overall program,

then start writing code!

04/18/23 ECE 264: Lecture 4 20

Final notes Next time

More on formatted output Acknowledgements: this lecture borrows

heavily from lecture slides provided with the following texts: Deitel & Deitel, C++ How to Program, 8th ed. Etter & Ingber, Engineering Problem Solving with

C++, 2nd ed.

04/18/23 ECE 264: Lecture 4 21