2. Lect 27 P. 2 Note: There is no “.h” on standard header files. Be careful about “using namespace std” iostream -- contains basic information required for all stream I/O operations iomanip -- contains information useful for performing formatted I/O with parameterized stream manipulators fstream -- contains information for performing file I/O operations strstream -- contains information for performing in-memory I/O operations (i.e., into or from strings in memory) Winter Quarter Stream I/O Library Header Files
3. Lect 27 P. 3 ios is the base class. istream and ostream inherit from ios ifstream inherits from istream (and ios) ofstream inherits from ostream (and ios) iostream inherits from istream and ostream (& ios) fstream inherits from ifstream, iostream, and ofstream Winter Quarter Classes for Stream I/O in C++
4. Lect 27 P. 4 C++ provides various stream manipulators that perform formatting tasks. Stream manipulators are defined in <iomanip> These manipulators provide capabilities for setting field widths, setting precision, setting and unsetting format flags, flushing streams, inserting a "newline" and flushing output stream, skipping whitespace in input stream Winter Quarter C++ Stream I/O -- Stream Manipulators
5. Lect 27 P. 5 setprecision ( ) Select output precision, i.e., number of significant digits to be printed. Example: cout << setprecision (2) ; // two significant digits setw ( ) Specify the field width (Can be used on input or output, but only applies to next insertion or extraction). Example: cout << setw (4) ; // field is four positions wide Winter Quarter C++ Stream I/O -- Stream Manipulators
6. Lect 27 P. 6 Winter Quarter C++ Stream I/O -- Stream Format States Various ios format flags specify the kinds of formatting to be performed during stream I/O. There are member functions (and/or stream manipulators) which control flag settings. There are various flags for trailing zeros and decimal points, justification, number base, floating point representation, and so on.
7. Lect 27 P. 7 Stream I/O Format State Flags ios::showpoint when set, show trailing decimal point and zeros ios::showpos when set, show the + sign before positive numbers ios::basefield ios::dec use base ten ios::oct use base eight ios::hex use base sixteen Winter Quarter
8. Lect 27 P. 8 Winter Quarter Stream I/O Format State Flags ios::floatfield ios::fixed use fixed number of digits ios::scientific use "scientific" notation ios::adjustfield ios::left use left justification ios::right use right justification ios::internal left justify the sign, but right justify the value
9. Lect 27 P. 9 ios::eofbit set when eof encountered [ stream.eof() ] ios::failbit set when format error occurred on the stream, but no characters were lost [ stream.fail() or simply ! stream ] ios::badbit set when stream error occurs that results in a loss of data [ stream.bad() ] ios::goodbit set when none of the bits eofbit, failbit, or badbit are set [ stream.good() ] Winter Quarter Stream I/O Format State Flags
10. Lect 27 P. 10 .setf ( ) Allows the setting of an I/O stream format flag. Examples: // To show the + sign in front of positive numbers cout.setf (ios::showpos) ; // To output the number in hexadecimal cout.setf (ios::hex, ios::basefield) ; Winter Quarter I/O Stream Member Functions
11. Lect 27 P. 11 .precision ( ) ; Select output precision, i.e., number of significant digits to be printed. Example: cout.precision (2) ; // two significant digits .width ( ) ; Specify field width. (Can be used on input or output, but only applies to next insertion or extraction). Example: cout.width (4) ; // field is four positions wide Winter Quarter I/O Stream Member Functions
12. Lect 27 P. 12 .eof ( ) ; Tests for end-of-file condition. Example: cin.eof ( ) ; // true if eof encountered .fail ( ) ; Tests if a stream operation has failed. Example: cin.fail ( ) ; // true if a format error occurred ! cin; // same as above; true if format error Winter Quarter I/O Stream Member Functions
13. Lect 27 P. 13 .clear ( ) ; Normally used to restore a stream's state to "good" so that I/O may proceed or resume on that stream. Example: cin.clear ( ) ; // allow I/O to resume on a "bad" // stream, in this case "cin", // on which error had previously // occurred Winter Quarter I/O Stream Member Functions
14. Lect 27 P. 14 #include <iostream> // No “.h” (standard header) #include <iomanip> // No “.h” (standard header) using namespace std; // To avoid “std::” int main ( ) { int a, b, c = 8, d = 4 ; float k ; char name[30] ; cout<< "Enter your name" <<endl; cin.getline (name, 30); cout<< "Enter two integers and a float " <<endl; cin>> a >> b >> k ; Winter Quarter Using Manipulators & Member Functions
15. Lect 27 P. 15 // Now, let's output the values that were read in cout<< "Thank you, " << name << ", you entered" <<endl<< a << ", " << b << ", and " ; cout.width (4) ; cout.precision (2) ; cout<< k <<endl; // Control the field and precision another way cout<<"Thank you, " << name << ", you entered" <<endl<< a << ", " << b << ", and " <<setw(c) <<setprecision(d)<< k <<endl; } Winter Quarter Using Manipulators & Member Functions
16. Lect 27 P. 16 Winter Quarter Example Program Output Enter your name R. J. Freuler Enter two integers and a float 12 24 67.85 Thank you, R. J. Freuler, you entered 12, 24, and 68 Thank you, R. J. Freuler, you entered 12, 24, and 67.85
17. Lect 27 P. 17 .get ( ) ; Example: char ch ; ch= cin.get ( ) ; // gets one character from keyboard // & assigns it to the variable "ch" .get (character) ; Example: char ch ; cin.get (ch) ; // gets one character from // keyboard & assigns to "ch" Winter Quarter More Input Stream Member Functions
18. Lect 27 P. 18 Winter Quarter More Input Stream Member Functions .get (array_name, max_size) ; Example: char name[40] ; cin.get(name, 40) ; // Gets up to 39 characters // and inserts a null at the end of the // string "name". If a delimiter is // found, the read terminates. The // delimiter is not stored in the array, // but it is left in the stream.
19. Lect 27 P. 19 .getline (array_name, max_size) ; Example: char name[40] ; cin.getline(name, 40) ; // Gets up to 39 characters // and assigns the string to "name". A // null is inserted at the end of the string. // Note that if a delimiter is found, // it is removed from the stream, but it is // not stored in the character array. Winter Quarter More Input Stream Member Functions
20. Lect 27 P. 20 More Input Stream Member Functions .ignore ( ) ; Ex: cin.ignore ( ) ; // gets and discards 1 character cin.ignore(2) ; // gets and discards 2 characters cin.ignore (80, ''); // gets and discards up to 80 // characters or until "newline" // character, whichever comes // first Winter Quarter
21. Lect 27 P. 21 More Input Stream Member Functions .peek( ) ; Ex: char ch ; ch = cin.peek ( ) ; // peek at (don't take) character .putback( ) ; Ex: char ch; cin.putback(ch); // put character back in stream Winter Quarter
22. Lect 27 P. 22 More I/O Stream Member Functions Winter Quarter .read( ) ; .write( ) ; Ex: char gross[144] ; cin.read(gross,144); // reads 144 characters from // input stream. Does NOT // append ''
23. Lect 27 P. 23 File I/O with C++ #include <fstream> using namespace std; int main ( ) { int a, b, c ; ifstream fin ; //Create file input stream object fin.open( "my_input.dat"); //Open input file fin >> a >> b ; //Read two values from input file c = a + b ; ofstream fout ; //Create file output stream object fout.open( "my_output.dat"); //Open output file fout << c <<endl; //Write result to output file fin.close ( ) ; //Close input file fout.close( ) ; //Close output file } Winter Quarter