310 likes | 427 Views
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. IO Streams Considerations for IOStreams vs. printf... printf uses format strings
E N D
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 1 February2006
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 1 February2006
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 1 February2006
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 1 February2006
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 1 February2006
Input Streams • istream member functions to the rescue…. • get( ) • getline( ) • Allow us to read an entire line or buffer 1 February2006
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); • }; 1 February2006
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 1 February2006
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); • }; 1 February2006
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 1 February2006
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 1 February2006
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. } 1 February2006
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 1 February2006
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(); 1 February2006
File IO Streams ifstream and ofstream • To open file… • File stream's constructor is passed the file to open • Prototype • ofstream output( char* myFileName ); 1 February2006
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; } 1 February2006
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. 1 February2006
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 1 February2006
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 1 February2006
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 1 February2006
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> 1 February2006
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); 1 February2006
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 1 February2006
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 1 February2006
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;; 1 February2006
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(); 1 February2006
Strstreams Accessing ostrstream Contents and Freezing the Stream • Invoking member function str ( )freezes the stream • Action causes ostrstream return pointer to itsinternal • buffer • User invoking str ( ) is now responsible formanaging the • storage 1 February2006
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 1 February2006
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 1 February2006
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… 1 February2006
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 1 February2006