Simple File I/O Switch Statement Chapter 11 Chapter 12

advertisement

Simple File I/O

Chapter 11

Switch Statement

Chapter 12

1

Agenda

File names and file streams 

Intro to Classes and Objects

End-of-file Loops

Formatting Output

Switch statement

2

The need for files in programming

Oracle Testing—allows rapid data entry for thorough testing of all branches of code

(every if, else, case, etc)

Recording Output—maintaining records of program executions

Word processing—storing documents that can be edited and revised when a word processor runs

3

File Names and Types

A file name should reflect its contents

Payroll.dat

Students.txt

Grades.txt

A file’s extension indicates the kind of data the file holds

.dat, .txt general program input or output

.cpp C++ source file

.doc

Microsoft word document

4

I/O Streams

A stream in C++ is a conduit (pipe) through which data passes

Input passes through the istream object and output passes through the ostream object. Input and output are managed by the istream object cin and the ostream object cout

The istream class defines the use of the extraction operator ‘ >> ’ (used with cin)

5

Stream Extraction and Insertion

#include <iostream>

Input (stream extraction): cin

>> // takes data from stream and sticks in variable

Output (stream insertion): cout

<< // takes data from variable and puts into stream

Input (Extraction) skips whitespace!

‘\n’, ‘\t’, ‘ ‘, ‘\r’, ‘\v’

6

Input and Output File Streams

Input from a file is managed by an ifstream object in the same way that the input from the keyboard is managed by the istream object cin

Similarly, output to a file is managed by an ofstream object in the same way that the output to the monitor is managed by the ostream object cout

The difference is that ifstream and o fstream objects have to be declared explicitly and initialized with the external name of the file which they manage

#include the <fstream.h> header file

7

Files: Let’s Use Them

#include <fstream>

Declare a file stream variable ifstream inFile; //input file stream ofstream outFile; //output file stream

Open the files inFile.open(“MyInput.dat”); outFile.open(“MyOutput.dat”);

8

Output File Stream Example

#include<fstream>

#include<iostream> void main()

{

Create a new file stream newfile ofstream newfile;

Connect newfile to the file on disk newfile.open("students.txt");

} newfile<<“this is written to the file”; cout<<“this is written to the monitor”;

9

Write a database file, Lab 9 prob 1)

char done = 'y'; int acntnum; //an account number float balance; // an account balance ofstream outfile; // a file variable.

a) Setting up

outfile.open ("accnts.dat");

Output File

// prepare database file for writing

10

Lab 9 prob 1) continued

// Now input values from keyboard and write to the disk.

while (done != 'n')

b) Using output file

{ cout << "enter an accnt number and balance: "; cin >> acntnum >> balance;

}

} outfile << acntnum << " " << balance << endl; cout << "another account? enter `y' or `n':"; cin >> done;

Download Lab9 & Try 1) Now!

11

Lab 9 Prob 2) Now Read database file

float sum = 0.0;

Same file we wrote to

ifstream infile; // a file var. for the input infile.open ("accnts.dat"); //prepare file for reading for (n=0; n<3; n++) // sum 3 accounts...

{ infile >> acntnum >> balance; sum += balance;

} cout << "The total of all accounts is: " << sum ;

12

Always Close your Files

Don’t forget to close the files when you are done with them infile.close( ); outfile.close( );

Handles any final writing and lets file be reopened later in program.

Put this after all reads/writes are finished

(usually right before program or function terminates)

13

Alternative Opening Syntax

Instead of Declaring then opening: ifstream infile; infile.open(“accts.dat”);

You can Declare and Open in one statement ifstream infile(“accts.dat”); ofstream outFile(“accts.dat”);

14

Agenda

File names and file streams

Intro to Classes and Objects 

End-of-file Loops

Formatting Output

15

Intro to Objects and Classes

An object is a variable that has functions and data associated with it infile and outfile each have a function named open( ) associated with them infile and outfile use different versions of a function named open

• One version of open is for input files

• A different version of open is for output files

16

Calling a Member Function

Calling a member function requires first specifying the object containing the function

The calling object is separated from the member function by the dot operator

Example: inFile .

open(“accts.dat");

Calling object

Dot operator

Member function

17

Classes

A type whose variables are objects, is a class ifstream is the type of the infile variable

(object) ifstream is a class

The class of an object determines its member functions

Example: ifstream inputFile, inputData;

• inputFile.open

and inputData.open

are the same function but might be given different filenames to open

18

Class Member Functions

The member functions an object can use are defined in its class definition

The class determines the member functions of the object

The class ifstream has an open function

Every variable (object) declared of type ifstream has that open function available

19

Agenda

File names and file streams

Intro to Classes and Objects

End-of-file Loops 

Formatting Output

20

Other Capabilities of File Streams

A File stream object maintains a true/false value that can be tested to check an operation ifstream infile; infile.open(“accts.dat”);

If open was unsuccessful… if (!infile)

{ cout<<“file not found”; exit(1);

} This message is displayed

And program quits

21

Loop until end-of-file

Process indefinite list in a file: infile>>acntnum>>balance; while(infile) Check stream status

{ after each read

// process last data

}

// get next data infile>>acntnum>>balance;

22

A more compact version

Process indefinite list in a file: while(infile>>acntnum>>balance)

{

// process data

}

Read data and

Check status after each read

23

Agenda

File names and file streams

Intro to Classes and Objects

End-of-file Loops

Formatting Output 

24

Tools for Stream Formatting

Running Lab 9 Prob 1, if we enter

111 123.45

222 444.777777777

33 12000000.22

We get an accnts.dat file that looks like this:

111 123.45

222 444.778

33 1.2e+07

25

Formatting Output to Files

Remember to #include <iomanip>

Use setprecision(2) -to force 2 digits of precision for all float data

Use fixed – to force fixed point formatting (no e-notation allowed) for all following data

Use left (-or right) to justify (line up) on left or right side of column strings look better with left, numbers with right

Use setw(10) to output data right justified in a field of 10 spaces

Only applies to next data

26

#include <iomanip>

Lab 9 Prob1) With Formatting

while (done != 'n')

{ cout << "enter an account number and balance: "; cin >> acntnum >> balance; outfile<<setprecision(2)<<fixed<< setw(10)

<< acntnum <<setw(15) << balance << endl; cout << "another account? enter `y' or `n':"; cin >> done;

}

27

The Result!

NOW running Listing 8.1 MODIFIED, if we enter

111 123.45

222 444.777777777

33 12000000.22

We get an accnts.dat file that looks like this:

111 123.45

222 444.78

33 12000000.00

28

Creating Space in Output

 The setw function specifies the number of spaces for the next item

Applies only to the next item of output

 Example: To print the digit 7 in four spaces use outfile<<setw(4)<< 7 << endl;

Three of the spaces will be blank

7

(ios::left)

Slide 29

switch Statement

Can be used instead of if-else-if switch(expression)

{ case constant1: statementList1; case constant2: statementList2;

… case constantN: statementListN; default: statementList0;

}

30

switch in Practice…a menu

char choice; cout<<enter P for payroll, E for employee info, Q to quit”<<endl; cin>>choice; switch (choice)

{ case ‘P’: cout<<“processing payroll”; break; case ‘E’: case ‘e’: cout<<“processing employee”; break; default: cout << “Quitting program”; break;

}

31

switch in Practice…ATM menu loop

do

{ menu(); // display menu cin>>choice; switch(choice)

Use break to avoid

{

“falling through” case 'B': balance(userID); break; case 'T‘: totalBalance(); break; default:cout<<"Command notvailable”;

}

} while(choice !='Q');

32

Sample Final Exam Problem…

12.

what is the exact output of the following program segment?

for (int k=0; k<8; k++) switch(k)

{ case 0: case 7: cout<<"R"; break; case 2: cout<<"I"; break; case 3: cout<<"N"; break; case 4: cout<<"D"; break; default: cout<<"E"; break;

}

33

Sample Final Exam Problem…with twist

12.

what is the exact output of the following program segment?

for (int k=0; k<8; k++) switch(k)

{ case 0: case 7: cout<<"R";

 forgot break case 2: cout<<"I"; break; case 3: cout<<"N"; case 4: cout<<"D"; break; default: cout<<"E"; break;

 forgot break

}

34

Finally !!! … THE END

35

Download