310 likes | 408 Vues
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
Input Streams istream member functions to the rescue…. get( ) getline( ) Allow us to read an entire line or buffer 1 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008
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 October 2008