0% found this document useful (0 votes)
38 views31 pages

Exploring The C++ Stream Library: IO Streams

IOStreams are part of the Standard C++ library Meant to be used in place of C stdio library. IO streams there are no format strings printf format strings are interpreted at run time not compile time With printf binding between variables and values occurs at runtime With IO streams.

Uploaded by

JPR EEE
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
38 views31 pages

Exploring The C++ Stream Library: IO Streams

IOStreams are part of the Standard C++ library Meant to be used in place of C stdio library. IO streams there are no format strings printf format strings are interpreted at run time not compile time With printf binding between variables and values occurs at runtime With IO streams.

Uploaded by

JPR EEE
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 31

Exploring the C++ Stream Library

IO Streams

IOStreams are part of the Standard C++ library

Meant to be used in place of C stdio library

So why re-invent the standard io library

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

-1-

Exploring the C++ Stream Library


IO Streams

Considerations for IOStreams vs. printf...


printf uses format strings printf format strings are interpreted at run time not compile time With printf binding between variables and values occurs at runtime With IO streams there are no format strings Cannot overload printf
Copyright 2008 Oxford Consulting, Ltd 1 October 2008

-2-

Exploring the C++ Stream Library


IOStream Class Hierarchy
IOS streambuf* readbuf( )
streambuf

ostream
const ostream& operator << (type) const ostream& operator << (streambuf*)

istream
const istream& operator >> (type) const istream& operator >> (streambuf*)

ofstream

ostrstream

ifstream

istrstream

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

-3-

Exploring the C++ Stream Library


Input Streams
The extraction Operator >> Performs the same function as scanf in the C stdio library Uses white space to delimit its arguments
Type at the keyboard 234 678 Execute code int i, j;

cin >> i >> j;


i contains 234 j contains 678
Copyright 2008 Oxford Consulting, Ltd 1 October 2008

-4-

Exploring the C++ Stream Library


Input Streams The extraction Operator >>
Because istream extraction works like scanf.. It has many of the same problems

Type at the keyboard my name Execute code

int i, j;
cin >> i >> j; values I and j are left unchanged
Copyright 2008 Oxford Consulting, Ltd 1 October 2008

-5-

Exploring the C++ Stream Library


Input Streams istream member functions to the rescue.
get( ) getline( )

Allow us to read an entire line or buffer

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

-6-

Exploring the C++ Stream Library


Input Streams

get Member Function Prototypes


class istream { public: ... istream& get(char* ptr, int len, char delim = `\n'); istream& get(char& c); int get(); istream& getline(char* ptr, int len, char delim = `\n'); istream& getline(char& c); int getline(); istream& read(char* ptr, int n); };

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

-7-

Exploring the C++ Stream Library


Input Streams
Member function get Leaves delimiter in input stream

Member function getline


Reads and discards delimiter Member function read Used to read raw non-delimited bytes

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

-8-

Exploring the C++ Stream Library


Output Streams The Insertion Operator <<
Performs the same function as printf in the C stdio library Its function members are similar to those in the istream class
class ostream { public: ... ostream& put(char c); ostream& write(const char* buffer, int length); };

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

-9-

Exploring the C++ Stream Library


Output Streams The Insertion Operator << Member Function put
Inserts single character into output stream

Member Function write


Writes specified number of characters ... From designated buffer into output stream

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 10 -

Exploring the C++ Stream Library


Error Handling on Input Reading Correct Input Data... IOstreams designed so they can be tested
if (cin) if (!cin)
Return true If the last read was successful

Return false If the last read was unsuccessful

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 11 -

Exploring the C++ Stream Library


Error Handling on Input
char buffer[256]; while (cin.getline(myBuff, sizeof(myBuf))) { // process the characters in the buffer. } char buffer[256]; while (cin.get(myBuff, sizeof(myBuf))) { cin.get() // read and discard newline // process the characters in the buffer. }

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 12 -

Exploring the C++ Stream Library


Error Handling on Input

Testing for Errors


cin.good()
Returns true if no errors

cin.eof()
Returns true if the input stream is at end of file

cin.fail()
Returns true if some input operation has failed

cin.bad()
Returns true if something has gone wrong with streambuf

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 13 -

Exploring the C++ Stream Library


Error Handling on Input Testing for Errors
Once an input stream returns an error, it will no longer read any input To clear an error condition on a stream one must call the clear() error member function
Syntax cin.clear();

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 14 -

Exploring the C++ Stream Library


File IO Streams

ifstream and ofstream


To open file
File stream's constructor is passed the file to open

Prototype ofstream output( char* myFileName );

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 15 -

Exploring the C++ Stream Library


File IO Streams

ifstream and ofstream


void main( void ) { ofstream output("myFile.dat"); if (!output) { cerr << "Oops problem!!! Cant open myFile.dat" << endl; } return; }

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 16 -

Exploring the C++ Stream Library


File IO Streams

ifstream and ofstream


Observe the function ignore( ) .
Its tossing out the newline character left in input stream by the get function

Prototype istream& ignore(int n = 1, int delim = EOF);


n delim specifies the number of characters to ignore character after which ignore quits.

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 17 -

Exploring the C++ Stream Library


File IO Streams

ifstream and ofstream


Observe the second argument to the ifstream constructor
ios::in Specifies file to be opened for input

Default is input on an input stream

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 18 -

Exploring the C++ Stream Library


IO Streams
Seeking in IOStreams... Absolute stream location in a stream called streampos
Can obtain current stream position tellp( ) member function of ostream Identifies the current position in the output streambuf tellg( ) member function of istream Identifies the current position in the input streambuf

To move within a streambuf seekp member function of ostream seekg member function of istream

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 19 -

Exploring the C++ Stream Library


IO Streams Seeking in IOStreams...
Prototypes seekp (position); seekp (offset, ios::seekdir); seekg (position); seekg (offset, ios::seekdir); // absolute position // relative position // absolute position // relative position

seekdir beg - seek from beginning of current file curr - seek from current position end - seek backwards from end of current file

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 20 -

Exploring the C++ Stream Library


Strstreams
Formatting Using Streams Often when working with display screens necessary to dynamically create messages

Useful functions in the C stdio library for doing such formatting functions sprintf and sscanf
C++ also provides similar functionality with strstreams. Must include <strstrea.h>
Copyright 2008 Oxford Consulting, Ltd 1 October 2008

- 21 -

Exploring the C++ Stream Library


Strstreams istrstreams
Constructors for istrstream Create an input stream with the string passed to constructor as input
istrstream::istrstream(char* buf); istrstream::istrstream(char* buf, int size);

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 22 -

Exploring the C++ Stream Library


Strstreams ostrstreams
Constructors for ostrstream Create an output stream with the string passed to constructor as input

ostrstream::ostrstream(char* buf, int size, int = ios::out);


out - characters formatted into starting address of buffer Write pointer positioned at start of buffer app - characters appended to end of buffer Write pointer positioned at null terminator at end of string

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 23 -

Exploring the C++ Stream Library


Strstreams ostrstreams
The ostrstream will only allow size characters to be inserted ostrstream does not automatically insert a null terminator into buffer.Special manipulator ends provided

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 24 -

Exploring the C++ Stream Library


Strstreams ostrstreams and Storage Allocation
User Specified
char myBuffer[128]; ostrstream myString(myBuffer, sizeof(myBuffer)); myString << "Bonjour la Monde" << ends;

Automatic
ostrstream myString; // myString automatically allocates storage to hold the string. myString << " Bonjour la Monde << ends;;

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 25 -

Exploring the C++ Stream Library


Strstreams Accessing ostrstream Contents... To access the string an ostrstream contains
Use member function str( ) ..
.Returns a pointer to internal buffer holding the string char* cp = A.str();

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 26 -

Exploring the C++ Stream Library


Strstreams
Accessing ostrstream Contents and Freezing the Stream Invoking member function str ( ) freezes the stream Action causes ostrstream return pointer to its internal buffer User invoking str ( ) is now responsible for managing the

storage

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 27 -

Exploring the C++ Stream Library


Strstreams
Accessing ostrstream Contents and Unfreezing the Stream
Frozen stream can be unfrozen ... returns pointer to ostrstream

Syntax
ostrstreamInstance.rdbuff()->freeze(int arg = 1); arg 0 Unfreeze the stream arg 1 (or none) Freeze the stream

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 28 -

Exploring the C++ Stream Library


IO Streams
Overloading the Insertion Operator
When working with streams a particularly useful operator to overload is insertion operator Can specify how to send data to standard out or to a file Such ability can also be useful for debugging or saving the state of a program

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 29 -

Exploring the C++ Stream Library


IO Streams Overloading the Insertion or Extraction Operators
When overloading insertion or extraction operator
Must support constructs of form

cout << A << B << C cin >> J >> L >> M

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 30 -

Exploring the C++ Stream Library


IO Streams Overloading the Insertion or Extraction Operators
Syntax ostream& operator<<(ostream& streamObject, const type& instance);
streamObject - instance of a steam object passed by reference instance instance of a user defined variable passed by const reference

Copyright 2008 Oxford Consulting, Ltd

1 October 2008

- 31 -

You might also like