Advanced Input and Output Object-Oriented Programming Using C++ Second Edition 10.

Slides:



Advertisements
Similar presentations
CPS120: Introduction to Computer Science INPUT/OUTPUT.
Advertisements

I/O and Program Control Statements Dick Steflik. Overloading C++ provides two types of overloading –function overloading the ability to use the same function.
Advanced Topics Object-Oriented Programming Using C++ Second Edition 13.
Input/Output Main Memory istream ostream Disk Drive Keyboard Scanner Disk Drive Monitor Printer stream = sequence of bytes.
Understanding Arrays and Pointers Object-Oriented Programming Using C++ Second Edition 3.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 3: Input/Output.
Chapter 8: I/O Streams and Data Files. In this chapter, you will learn about: – I/O file stream objects and functions – Reading and writing character-based.
How to Program in C++ CHAPTER 3: INPUT & OUTPUT INSTRUCTOR: MOHAMMAD MOJADDAM.
C++ Programming: From Problem Analysis to Program Design, Fifth Edition Chapter 3: Input/Output.
Chapter 3: Input/Output
Engineering H192 - Computer Programming The Ohio State University Gateway Engineering Education Coalition Lect 27P. 1Winter Quarter I/O Manipulation Lecture.
Streams, Files. 2 Stream Stream is a sequence of bytes Input stream In input operations, the bytes are transferred from a device to the main memory Output.
Input/Output in C++ C++ iostream.h instead of stdio.h Why change? –Input/output routines in iostream can be extended to new types declared by the user.
Input and Output in Console Mode UNIVERSITY OF THE PUNJAB (GUJRANWALA CAMPUS) ADNAN BABAR MT14028 CR
Stream Handling Streams - means flow of data to and from program variables. - We declare the variables in our C++ for holding data temporarily in the memory.
1 Overloading Operators Object-Oriented Programming Using C++ Second Edition 8.
1 Advanced Input and Output COSC1567 C++ Programming Lecture 9.
Chapter 9 Formatted Input/Output. Objectives In this chapter, you will learn: –To understand input and output streams. –To be able to use all print formatting.
CHAPTER 3 INPUT/OUTPUT. In this chapter, you will:  Learn what a stream is and examine input and output streams  Explore how to read data from the standard.
You gotta be cool. Stream Stream Output Stream Input Unformatted I/O with read, gcount and write Stream Manipulators Stream Format States Stream Error.
C++ Programming: Program Design Including Data Structures, Fifth Edition Chapter 3: Input/Output.
Chapter 3 Assignment, Formatting, and Interactive Input C++ for Engineers and Scientists Third Edition.
File I/O ifstreams and ofstreams Sections 11.1 &
Chapter 9 I/O Streams and Data Files
FILE HANDLING IN C++.
Introduction to C++ Version 1.1. Topics C++ Structure Primitive Data Types I/O Casting Strings Control Flow.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 3: Input/Output.
File I/O 1 ifstreams and ofstreams Sections 11.1 & 11.2.
I/O and Data Formatting Introduction to Class Concepts INFSY 307 Spring 2003 Lecture 3.
Input/Output Sujana Jyothi C++ Workshop Day 2. C++ I/O Basics 2 I/O - Input/Output is one of the first aspects of programming that needs to be mastered:
Chapter 3: Assignment, Formatting, and Interactive Input.
C++ for Engineers and Scientists Second Edition Chapter 3 Assignment, Formatting, and Interactive Input.
4. Input/Output Intro Programming in C++ Computer Science Dept Va Tech August, 2001 © Barnette ND & McQuain WD 1 C++ Input/Output: Streams The.
Liang, Introduction to Programming with C++, Second Edition, (c) 2010 Pearson Education, Inc. All rights reserved Chapter 13 File Input and.
 2000 Prentice Hall, Inc. All rights reserved. Chapter 21 - C++ Stream Input/Output Basics Outline 21.1Introduction 21.2Streams Iostream Library.
CHAPTER 2 PART #3 C++ INPUT / OUTPUT 1 st Semester 1436 King Saud University College of Applied studies and Community Service CSC1101 By: Fatimah Alakeel.
Chapter 3: Input/Output
Unit 3 Lesson 6 Input and Output Streams with modifications by Mr. Dave Clausen.
1 Simple File I/O Chapter 11 Switch Statement Chapter 12.
Chapter -7 Basic function of Input/output system basics and file processing Stream classes : I/O Streams. A stream is a source or destination for collection.
Operating System Using setw and setprecision functions Using setiosflags function Using cin function Programming 1 DCT
Chapter 3 Assignment, Formatting, and Interactive Input C++ for Engineers and Scientists Third Edition.
UNIT VI Streams & Files in C++: Stream classes, stream errors, disk file I/O with streams, File pointers, Error handling in file I/O. File I/O with members.
Chapter 3: Input/Output. Objectives In this chapter, you will: – Learn what a stream is and examine input and output streams – Explore how to read data.
1 COMS 261 Computer Science I Title: Functions Date: October 24, 2005 Lecture Number: 22.
More about strings in C++. String member functions The next three slides present information about functions that are members of the C++ string class.
File Processing Files are used for data persistance-permanent retention of large amounts of data. Computer store files on secondary storage devices,such.
Input/Output in C++ C++ iostream.h instead of stdio.h Why change? –Input/output routines in iostream can be extended to new types declared by the user.
Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February IO Streams  IOStreams are part of the Standard C++ library.
Chapter 4 Strings and Screen I/O. Objectives Define strings and literals. Explain classes and objects. Use the string class to store strings. Perform.
نظام المحاضرات الالكترونينظام المحاضرات الالكتروني I/O and File management Concept of streams. cin and cout objects. C++stream classes. Unformatted I/O.
Chapter 3: Input/Output. Objectives In this chapter, you will: – Learn what a stream is and examine input and output streams – Explore how to read data.
Introduction Every program takes some data as input and generate processed data as out put . It is important to know how to provide the input data and.
C++ Basic Input and Output (I/O)
CPS120: Introduction to Computer Science
CPS120: Introduction to Computer Science
Chapter 2 part #3 C++ Input / Output
Input and Output Chapter 3.
Standard Input/Output Streams
Standard Input/Output Streams
Advanced Input and Output
Basic Input and Output C++ programs can read and write information using streams A simple input stream accepts typed data from a keyboard A simple output.
Strings and Streams Professor Hugh C. Lauer CS-2303, System Programming Concepts (Slides include materials from The C Programming Language, 2nd edition,
Chapter 3: Input/Output
Managing console i/o operations
Chapter 3 Input output.
CSC 143 Stream I/O Classes and Files [A11-A15, A38-A50]
Chapter 4 INPUT AND OUTPUT OBJECTS
Chapter 2 part #3 C++ Input / Output
Presentation transcript:

Advanced Input and Output Object-Oriented Programming Using C++ Second Edition 10

Objectives In this chapter, you will learn: How cout and cin possess the same traits as other C++ objects How to use istream member functions, particularly get(), ignore(), and getline() How to use ostream member functions, particularly setf(), unsetf(), width(), and precision() How to create your own manipulator functions 10

Objectives In this chapter, you will learn: How to use built-in manipulators How to create a manipulator that takes an argument About computer files and the data hierarchy How to perform file output How to read a file from within a program How to write class objects to files How to read a data file into class objects 10

Understanding CIN and COUT as Class Objects You can think of cout and cin as real-world objects Like other C++ objects you have created, cout and cin are members of a class Their class is derived from another class (which is derived from yet another class), so they use inheritance The cout and cin objects can take advantage of overloaded operators such as > which are used for shifting bits in other contexts 10

Understanding CIN and COUT as Class Objects When you include iostream.h in a program, you are including a file that contains the definition for a derived class named iostream In C++, a stream is a sequence of characters used to perform input and output operations The name iostream is short for “Input and Output” stream 10

Using istream Member Functions In C++, the easiest way to read in a character is to use cin with the extraction operator, for example, cin>>someVariable; The extraction operator is actually an overloaded function named operator>>() 10

Using the get() Function Another member function of the istream class is get() The get() function takes a character argument and returns a reference to the object (the istream class) that invoked the get() function Therefore more than one get() function can be included in a statement Its prototype has the following form: istream& get(char &c); 10

Using the get() Function Most compilers overload get() so that, in addition to taking a character reference as an argument, it also can take no argument The following version of the get() function returns the character being read in as an integer Its prototype is: int get( ); The third argument is the character that terminates the entry, often called the delimiter character The default value to stop data entry, as you can see from the prototype, is the Enter key, which coded as ‘\n’ 10

Using the get() Function The second argument of the get() function—the number of characters to be stored—is very important Without the second argument, a user could destroy memory by entering a string of characters that was longer than the area prepared to receive it The output in Figure 10-3 and 10-4 illustrate one benefit of using the get() function instead of the extraction operator (>>) for keyboard data entry 10 Ex10-1

Using the get() Function One unfortunate side effect of the get() function is that it leaves unused characters in the input stream A subsequent call to get() retrieves the next (unused) character, whether or not that retrieval was intended As shown in Figure 10-6, the program doesn’t stop to obtain your grade, because the second call to get() already has been satisfied with the newline character 10

The UserNameAndGrade Program 10 Ex10-2

Using the get() Function The program output shown in Figure 10-6 includes your first name and a newline (instead of a grade) for the letter grade To allow the user to enter a grade, you could add a third cin.get() statement to the program, as shown in Figure

Using the get() Function Programmers say this call to the get() function absorbs or consumes the extra character 10 Ex10-2

Using the get() Function If you run the program in Figure 10-7 and enter a name that is too long, the output looks like Figure Ex10-2

Using the ignore() Function It is impossible to guess how many cin.get() statements are needed to consume all the potential additional letters of a name if you use the UserNameAndGrade2 program—imagine the challenge of a name such as Barbara Penelope A superior alternative is to use the ignore() function to ignore or skip any additional characters left in the input stream The prototype of the ignore() function is: istream& ignore(int length = 1, char c = ‘\n’); 10

The UserNameAndGrade Program Using ignore() 10 Ex10-2

Using the ignore() Function 10 Ex10-2

Using the getline() Function As an alternative to using an extra call to get() to absorb the Enter key after character data entry, or using the ignore() function to absorb any number of characters, you can include another istream member, getline() Its prototype is: istream& getline(char *str,int len, char c=‘\n’); The getline() function reads a line of text at the address represented by str It reads text until it reaches either the length used as the second argument or the character used as the third argument 10

Using the getline() Function The program in Figure 10-13, and the output in Figure 10-14, show how the getline() function correctly accepts characters up to and including the default newline delimiter 10

Using the getline() Function When you use a delimiter other than ‘\n’ with getline(), the getline() consumes the delimiter but leaves he subsequent Enter key in the input stream, so you still must account for it The program in Figure and its output in Figure illustrate the use of get() to consume the Enter key by getline() 10 Ex10-3

Using the getline() Function 10 Ex10-3

Other istream Member Functions Most compilers support other istream member functions with names such as eof(), bad(), and good() The istream class is not mysterious It is just a class, and cin is just an object that already has been instantiated for you 10

Using ostream Member Functions The concepts you have learned while studying the cin object apply to the cout object as well The ostream class supports member functions and overloaded operators just like the istream class — or any other class, for that matter 10

Using Format Flags with setf() and unsetf() Many of the states of the cout object are contained in a single long integer field, in which each bit represents some condition of the object The arguments that determine the state of the cout object are called format flags or state flags All format flags begin with ios:: One member function of the ios class, the setf() function, takes arguments that set the bits of cout; that is, the arguments turn the bits in the flag on or off Another member function, unsetf(), can be used to deselect the bit: cout.unsetf(ios::showpos); Using the setf() function, you also can combine format flags using the bitwise OR operator (|) 10

Using Format Flags with setf() and unsetf() Some commonly used format flags are: –ios::left—left-justifies output within the field size, which may be set by the width() function (described in a following section) –ios::right—right-justifies output within the field size –ios::dec—formats numbers in decimal (base 10) –ios::hex—formats numbers in hexadecimal (base 16) –ios::oct—formats numbers in octal (base 8) –ios::showpos—inserts a + before positive numbers –ios::showpoint—displays the decimal point and six decimal positions for all floating-point numbers 10

Using the width() Function You can change the output field width with the iostream member width() function This function defines the size of the output field in which the passed argument will be displayed The width() function applies only to the first subsequent field to be output 10

Using the width() Function 10 Ex10-4

Using the precision() Function You can use the precision() function to control the number of significant digits you see in the output If you want to control the number of positions shown to the right of the decimal point (instead of simply the number of significant positions visible), you must combine cout.setf(ios::fixed); and cout.precision(); 10

Using the precision() Function In the steps outlined on pages 373 and 374 of the textbook, you declare an array of doubles, assign values with different numbers of significant digits, and then display all the values using the same precision 10 Ex10-5

Creating Manipulator Functions If you need to display a variable named amountMoney in currency format with a dollar sign, in base 10, in a field size of eight, you might write the code shown in Figure When you create a manipulator function, the desired results become much clearer A manipulator function is used to manipulate, or change, the state of the cout object 10

Creating Manipulator Functions You could write a manipulator to format output as currency The function contains statements that display the dollar sign, set some ios flags, and set the width In the function shown in Figure 10-21, a reference to ostream is passed into the function as an argument 10

Using Built-In Manipulators Some manipulators are so useful that they are already coded and placed in libraries included with your C++ compiler You already have used the endl manipulator to output a newline character and flush the output stream 10

Using the setprecision() Manipulator You use the setprecision() manipulator to specify the number of decimals that will print The setprecision() manipulator works like the precision() function—it specifies the number of significant digits to display It is considered a manipulator instead of a member function because you chain a call to setprecision() along with other output and the insertion operator, rather than using an object and a dot operator, as you do with cout.precision() 10

The DemoPrecision2 Program 10

Using the setprecision() Manipulator Any C++ manipulator, such as setprecision(), that takes an argument requires the inclusion of the iomanip.h file in your program The program in Figure produces the output in Figure Ex10-6

Using the setw() Manipulator The setw() manipulator allows you to set the width of a field for output Use of the setw() manipulator requires inclusion of the iomanip.h file, because setw() requires an argument that represents the width of the output field The setw() manipulator works like the width() member function you can use with the cout objects; the advantage of using setw() is its chaining capability in a cout statement 10

Using the setiosflags() and resetiosflags() Manipulators Two additional manipulators, setiosflags() and resetiosflags(), each perform several manipulations, depending on the flags (such as ios::dec or ios::showpoint) they receive as arguments The setiosflags() manipulator turns on bit codes for the attributes named as arguments; the resetiosflags() manipulator turns off those bit codes 10

Using the setiosflags() and resetiosflags() Manipulators In the set of steps shown on pages 379 and 380 of the textbook, you combine the setprecision() and setiosflags() manipulators to produce output that displays decimal values with a fixed number of decimal places in a column 10 Ex10-7

Creating Manipulators that Require an Argument To create a manipulator that does not require an argument, you must write a function that receives and returns an ostream reference argument To create a manipulator that takes an argument, you must write two functions When you use a manipulator that requires no argument, such as endl or the currency manipulator developed above, the address of the output or input stream is passed to the function With manipulators, such as setw(), that take an argument both the address of the stream and the argument itself must be passed to the manipulator function This task is handled by the omanip() function, which is defined in the file iomanip.h 10

The Currency Manipulator with an Argument 10

Creating Manipulators that Require an Argument In Figure 10-25, the main() program calls the currency function, passing a 7 as the argument that indicates field width In the steps referred to on pages 382 and 383 of the textbook, you create a manipulator that formats a part number for a manufacturing company 10 Ex10-8

Creating Manipulators that Require an Argument 10 Ex10-9

To be continued About computer files and the data hierarchy How to perform file output How to read a file from within a program How to write class objects to files How to read a data file into class objects

Understanding Computer Files When you store data items in a computer system, you use a permanent storage device, such as a disk or a reel of magnetic tape The term permanent is used to contrast this type of data storage with the temporary data storage that exists in computer memory Data items typically exist in memory for only a short time It is common practice to store data in a data hierarchy, which represents the relationships between the sizes of data units that business professionals most often use 10

Understanding Computer Files A data field represents one piece of data, such as a first or last name, phone or Social Security number, or salary A data record consists of a number of data fields that are logically connected because they pertain to the same entity A data file contains records that are logically related Often, records within a data file are stored with a space or other delimiting character between fields, and a newline between each record 10

A Data File Containing Employee Data 10

Simple File Output You have used a descendant of the ios class— and its descendant iostream to produce all sorts of screen output In C++, when you write to a disk file rather than to the screen, you use a class named fstream, which, like ostream, is ultimately derived from ios Figure shows the relationship between fstream and some other input and output classes 10

The fstream Family Tree 10

Simple File Output The fstream class is defined in the fstream.h file, which must be included in any C++ program that writes to or reads from a disk You instantiate an ofstream output file object as you do any other object—by calling its constructor 10

Simple File Output In the steps provided on pages 387 to 389 of the textbook, you open a file write your name to it, and close it 10

Simple File Output 10 Ex10-10

Simple File Input Ifstream and ofstream objects are used in many similar ways Like the ofstream class, the name of the ifstream object you instantiate can be any legal C++ identifier; the name has no relationship to the name of the file being opened The ifstream class uses the get() function to access file data In the steps located on pages 389 and 390 of the textbook, you read the name in from the Name.txt file you created in the previous set of steps 10 Ex10-11

Using the getline() Function If a file contains data that ends with a newline character, then it’s a bit awkward to have a program that uses the get() function to read data from a file because you must discard the newline character As an alternative, you can use the getline() member function to read input data The getline() function takes the form fileObject.getline(destination, sizeLimit);, where destination is a declared character string, and sizeLimit is the maximum number of characters you want to store 10

Using the getline() Function In the list of steps outlined on page 391 of the textbook, you write a program that uses getline() to read the name file created in the WriteNameToFile.cpp program 10 Ex10-12

Using the getline() Function 10 Ex10-13

Writing Objects to Files It is simple and intuitive to use the ofstream class’s overloaded operator to write characters and strings to files It makes sense, however, that in object-oriented programs you should also be able to write objects to disk files The write() function allows you to do just that; the prototype is: ostream& write(char *c, int length); The write() function accepts two arguments: a pointer to a character and an integer 10

The Customer Class 10

Writing Customer Records to a File 10 Ex10-14

Writing Objects to Files You can create an array of customer objects, perform the data entry required for the Customers, and write the output to a disk (see the format on page 394 of the textbook) The program in Figure executes a for loop numCusts times (five times), performing data entry and writing to the file each time 10

Writing an Array of Customer Records to a File 10

Reading Objects from Files It is more convenient to read a data file directly into an array of class objects You can accomplish this goal with the read() function The read() function prototype is quite similar to the prototype for the write() function The prototype for read() is: istream& read(char *c, int length); The read() function requires a pointer to a character, so you must perform a cast when you read an object 10 Ex10-15

Reading Customer Records from a File 10

Reading Objects from Files The read() function also requires the size of the object being read Instead of reading one record at a time into the Customer array, you can perform one read for the entire array 10

Reading an Array of Records 10

Summary The C++ objects cout and cin possess the same traits as other C++ objects—they are members of a class, use inheritance, have access to overloaded operators, and have all other object traits To input data, you can use the extraction operator (>>) after the cin object To output data you can use the insertion operator with the cout object A manipulator function is used to manipulate, or change, the state of the cout object 10

Summary Built-in manipulators include endl, newline, setprecision(), setw(), setiosflags(), and resetiosflags() Creating a manipulator that takes an argument involves writing two functions The address of the stream and the argument itself must be passed to the manipulator function Usually, you store data on a disk (or other permanent storage device) in a data hierarchy in which fields are parts of data records that make up data files 10

Summary To perform file output, you must instantiate your own member of the ofstream class To read a file from within a program, you can create an object that is an instantiation of the ifstream class The write() function allows you to write class objects to files The write() function accepts two arguments: a character pointer to the address of the argument being written to the file, and the size of the object being written You can use the read() function to read a data file into class objects 10