Presentation is loading. Please wait.

Presentation is loading. Please wait.

Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 1 - - 1 - IO Streams  IOStreams are part of the Standard C++ library.

Similar presentations


Presentation on theme: "Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 1 - - 1 - IO Streams  IOStreams are part of the Standard C++ library."— Presentation transcript:

1 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 1 - - 1 - 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

2 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 2 - - 2 - 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

3 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 3 - - 3 - IOStream Class Hierarchy IOS streambuf* readbuf( ) IOS streambuf* readbuf( ) ostream const ostream& operator << (type) const ostream& operator << (streambuf*) ostream const ostream& operator << (type) const ostream& operator << (streambuf*) istrstream ifstream ofstream ostrstream istream const istream& operator >> (type) const istream& operator >> (streambuf*) istream const istream& operator >> (type) const istream& operator >> (streambuf*) streambuf

4 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 4 - - 4 - 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

5 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 5 - - 5 - 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

6 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 6 - - 6 - Input Streams istream member functions to the rescue…. get( ) getline( ) Allow us to read an entire line or buffer

7 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 7 - - 7 - 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); }; 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); };

8 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 8 - - 8 - 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

9 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 9 - - 9 - 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); } ;

10 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 10 - 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

11 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 11 - 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

12 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 12 - 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. } Error Handling on Input

13 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 13 - 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

14 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 14 - 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();

15 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 15 - File IO Streams ifstream and ofstream To open file… File stream's constructor is passed the file to open Prototype ofstream output( char* myFileName );

16 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 16 - File IO Streams ifstream and ofstream void main( void ) { ofstream output("myFile.dat"); if (!output) { cerr << "Oops problem!!! Can’t open myFile.dat" << endl; } return; }

17 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 17 - File IO Streams ifstream and ofstream Observe the function ignore( ) …. It’s tossing out the newline character left in input stream by the get function Prototype istream& ignore(int n = 1, int delim = EOF); n specifies the number of characters to ignore delim character after which ignore quits.

18 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 18 - 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

19 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 19 - 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

20 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 20 - IO Streams Seeking in IOStreams... Prototypes seekp (position); // absolute position seekp (offset, ios::seekdir); // relative position seekg (position); // absolute position seekg (offset, ios::seekdir); // relative position seekdir beg - seek from beginning of current file curr - seek from current position end - seek backwards from end of current file Prototypes seekp (position); // absolute position seekp (offset, ios::seekdir); // relative position seekg (position); // absolute position seekg (offset, ios::seekdir); // relative position seekdir beg - seek from beginning of current file curr - seek from current position end - seek backwards from end of current file

21 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 21 - 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

22 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 22 - 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);

23 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 23 - 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

24 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 24 - 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

25 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 25 - Strstreams ostrstreams and Storage Allocation  User Specified char myBuffer[128]; ostrstream myString(myBuffer, sizeof(myBuffer)); myString << "Bonjour la Monde" << ends;  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;;  Automatic ostrstream myString; // myString automatically allocates storage to hold the string. myString << " Bonjour la Monde” << ends;;

26 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 26 - 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();

27 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 27 - 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

28 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 28 - 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

29 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 29 - 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

30 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 30 - 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…

31 Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 31 - 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


Download ppt "Exploring the C++ Stream Library Copyright 2006 Oxford Consulting, Ltd1 February 2006 - 1 - - 1 - IO Streams  IOStreams are part of the Standard C++ library."

Similar presentations


Ads by Google