23
Lect 27 P. 1 Winter Quarter C++ I/O Manipulation

C++ io manipulation

Embed Size (px)

Citation preview

Page 1: C++ io manipulation

Lect 27 P. 1Winter Quarter

C++ I/O Manipulation

Page 2: C++ io manipulation

Lect 27 P. 2Winter Quarter

Stream I/O Library Header Files 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)

Page 3: C++ io manipulation

Lect 27 P. 3Winter Quarter

Classes for Stream I/O in C++

ios is the base class.istream and ostream inherit from iosifstream 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

Page 4: C++ io manipulation

Lect 27 P. 4Winter Quarter

C++ Stream I/O -- Stream Manipulators• 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

Page 5: C++ io manipulation

Lect 27 P. 5Winter Quarter

C++ Stream I/O -- Stream Manipulatorssetprecision ( )

• 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

Page 6: C++ io manipulation

Lect 27 P. 6Winter 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.

Page 7: C++ io manipulation

Lect 27 P. 7Winter Quarter

Stream I/O Format State Flags

ios::showpointwhen set, show trailing decimal point and zeros

ios::showpos when set, show the + sign beforepositive numbers

ios::basefieldios::dec use base ten

ios::oct use base eightios::hex use base sixteen

Page 8: C++ io manipulation

Lect 27 P. 8Winter Quarter

Stream I/O Format State Flags

ios::floatfieldios::fixed use fixed number of digitsios::scientific use "scientific" notation

ios::adjustfieldios::left use left justificationios::right use right justificationios::internal left justify the sign, but right

justify the value  

Page 9: C++ io manipulation

Lect 27 P. 9Winter Quarter

Stream I/O Format State Flagsios::eofbit set when eof encountered [ stream.eof() ]

ios::failbit set when format error occurred on thestream, but no characters were lost[ stream.fail() or simply ! stream ]

ios::badbit set when stream error occurs thatresults in a loss of data [ stream.bad() ]

ios::goodbit set when none of the bits eofbit,failbit, or badbit are set [ stream.good() ]

Page 10: C++ io manipulation

Lect 27 P. 10Winter Quarter

I/O Stream Member Functions.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) ;

Page 11: C++ io manipulation

Lect 27 P. 11Winter Quarter

I/O Stream Member Functions.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

Page 12: C++ io manipulation

Lect 27 P. 12Winter Quarter

I/O Stream Member Functions

.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

Page 13: C++ io manipulation

Lect 27 P. 13Winter Quarter

I/O Stream Member Functions

.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

Page 14: C++ io manipulation

Lect 27 P. 14Winter Quarter

Using Manipulators & Member Functions#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 ;

Page 15: C++ io manipulation

Lect 27 P. 15Winter Quarter

Using Manipulators & Member Functions// Now, let's output the values that were read in

cout << "\nThank 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 <<"\nThank you, " << name << ", you entered"

<< endl << a << ", " << b << ", and " << setw (c)

<< setprecision (d) << k << endl ;

}

Page 16: C++ io manipulation

Lect 27 P. 16Winter 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���

Page 17: C++ io manipulation

Lect 27 P. 17Winter Quarter

More Input Stream Member Functions.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"

Page 18: C++ io manipulation

Lect 27 P. 18Winter 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.

Page 19: C++ io manipulation

Lect 27 P. 19Winter Quarter

More Input Stream Member Functions.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.

Page 20: C++ io manipulation

Lect 27 P. 20Winter Quarter

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, '\n') ; // gets and discards up to 80

// characters or until "newline"

// character, whichever comes

// first

Page 21: C++ io manipulation

Lect 27 P. 21Winter Quarter

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

Page 22: C++ io manipulation

Lect 27 P. 22Winter Quarter

More I/O Stream Member Functions

.read( ) ; .write( ) ;

Ex:

char gross[144] ;

cin.read(gross,144) ; // reads 144 characters from

// input stream. Does NOT

// append '\0'

Page 23: C++ io manipulation

Lect 27 P. 23Winter Quarter

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 filefin.close ( ) ; //Close input file

fout.close ( ) ; //Close output file}