| Bruce Eckel's Thinking in C++, 2nd Ed | Contents | Prev | Next | 
| manipulator | effect | 
|---|---|
| Indicate
the numeric base (dec, oct, or hex) when printing an integral value. The format
used can be read by the C++ compiler.
 | |
| Show
plus sign (+) for positive values
 | |
| Display
uppercase A-F for hexadecimal values, and E for scientific values
 | |
| Show
decimal point and trailing zeros for floating-point values.
 | |
| Skip
white space on input.
 | |
| Left-align,
pad on right.
 Right-align, pad on left. Fill between leading sign or base indicator and value. | |
| Use
scientific notation
 setprecision( ) or ios::precision( ) sets number of places after the decimal point. | 
| manipulator | effect | 
|---|---|
| Sets
only the format flags specified by n. Setting remains in effect until the next
change, like 
ios::setf( ). | |
| Clears
only the format flags specified by n. Setting remains in effect until the next
change, like 
ios::unsetf( ). | |
| Changes
base to n, where n is 10, 8, or 16. (Anything else results in 0.) If n is zero,
output is base 10, but input uses the C conventions: 10 is 10, 010 is 8, and
0xf is 15. You might as well use 
dec,
oct,
and 
hex
for output.
 | |
| Changes
the fill character to n, like 
ios::fill( ). | |
| Changes
the precision to n, like 
ios::precision( ). | |
| Changes
the field width to n, like 
ios::width( ). | 
//: C18:Manips.cpp
// Format.cpp using manipulators
#include <fstream>
#include <iomanip>
using namespace std;
int main() {
  ofstream trc("trace.out");
  int i = 47;
  float f = 2300114.414159;
  char* s = "Is there any more?";
  trc << setiosflags(
         ios::unitbuf /*| ios::stdio */ /// ?????
         | ios::showbase | ios::uppercase
         | ios::showpos);
  trc << i << endl; // Default to dec
  trc << hex << i << endl;
  trc << resetiosflags(ios::uppercase)
    << oct << i << endl;
  trc.setf(ios::left, ios::adjustfield);
  trc << resetiosflags(ios::showbase)
    << dec << setfill('0');
  trc << "fill char: " << trc.fill() << endl;
  trc << setw(10) << i << endl;
  trc.setf(ios::right, ios::adjustfield);
  trc << setw(10) << i << endl;
  trc.setf(ios::internal, ios::adjustfield);
  trc << setw(10) << i << endl;
  trc << i << endl; // Without setw(10)
  trc << resetiosflags(ios::showpos)
    << setiosflags(ios::showpoint)
    << "prec = " << trc.precision() << endl;
  trc.setf(ios::scientific, ios::floatfield);
  trc << f << endl;
  trc.setf(ios::fixed, ios::floatfield);
  trc << f << endl;
  trc.setf(0, ios::floatfield); // Automatic
  trc << f << endl;
  trc << setprecision(20);
  trc << "prec = " << trc.precision() << endl;
  trc << f << endl;
  trc.setf(ios::scientific, ios::floatfield);
  trc << f << endl;
  trc.setf(ios::fixed, ios::floatfield);
  trc << f << endl;
  trc.setf(0, ios::floatfield); // Automatic
  trc << f << endl;
  trc << setw(10) << s << endl;
  trc << setw(40) << s << endl;
  trc.setf(ios::left, ios::adjustfield);
  trc << setw(40) << s << endl;
  trc << resetiosflags(
         ios::showpoint | ios::unitbuf
         // | ios::stdio // ?????????
 );