// -------------------
// FormattedOutput.c++
// -------------------

#include <cassert>  // assert
#include <ios>      // fmtflags
#include <iostream> // cout, endl, fixed, flags, ios_base, left, precision, scientific, streamsize
#include <iomanip>  // setfill, setprecision, setw
#include <sstream>  // ostringstream
#include <string>   // ==

int main () {
    using namespace std;
    cout << "FormattedOutput.c++." << endl;

    ios_base::sync_with_stdio(false); // turn off synchronization with C I/O
    const double pi = 3.1415926536;

    {
    ostringstream out;
    out << pi;
    assert(out.str() == "3.14159");
    }

    {
    ostringstream out;
    out << setfill('x') << setprecision(3) << setw(10) << pi << pi;
    assert(out.str() == "xxxxxx3.143.14");
    }

    {
    ostringstream out;
    out << left << setfill('x') << setprecision(3) << setw(10) << pi;
    assert(out.str() == "3.14xxxxxx");
    }

    {
    ostringstream out;
    out << fixed << setfill('x') << setprecision(3) << setw(10) << pi;
    assert(out.str() == "xxxxx3.142");
    }

    {
    ostringstream out;
    out << scientific << setfill('x') << setprecision(3) << setw(10) << pi;
    assert(out.str() == "x3.142e+00");
    }

    {
    ostringstream out;
    out << setw(10) << pi;
    assert(out.str() == "   3.14159");
    out << left << setfill('x') << setprecision(3) << setw(10) << pi;
    assert(out.str() == "   3.141593.14xxxxxx");
    out.fill(' ');
    out.unsetf(out.flags());
    out.precision(6);
    out << setw(10) << pi;
    assert(out.str() == "   3.141593.14xxxxxx   3.14159");
    }

    {
    ostringstream out;
    const char               fill      = out.fill();
    const ios_base::fmtflags flags     = out.flags();
    const streamsize         precision = out.precision();
    out << setw(10) << pi;
    assert(out.str() == "   3.14159");
    out << left << setfill('x') << setprecision(3) << setw(10) << pi;
    assert(out.str() == "   3.141593.14xxxxxx");
    out.fill(fill);
    out.flags(flags);
    out.precision(precision);
    out << setw(10) << pi;
    assert(out.str() == "   3.141593.14xxxxxx   3.14159");
    }

    cout << "Done." << endl;
    return 0;}


syntax highlighted by Code2HTML, v. 0.9.1