cout << "hex:" << hex << 11 << " " << 12 << " " << 13 << endl
<< "oct:" << oct << 11 << " " << 12 << " " << 13 << endl
<< "dec:" << dec << 11 << " " << 12 << " " << 13 << endl;
hex
used for display the hexadecimal numbers in the stream, then oct
displays octal numbers, dec
restores the output to decimal. The keywords that
change the behavior of the stream, such as hex
and oct
, are called
manipulators.
Once the format of output is changed by manipulators like hex and oct, the numbers following them will be output in that base (persistent):
cout << hex << 10 << endl; // outputs a
cout << 10 << endl; // still outputs a
showbase
displays the base prefix. It adds the prefix 0x
when outputting hexadecimal numbers, and the prefix 0
when outputting octal numbers:
cout << showbase << hex << 11 << endl; // 0xb
cout << oct << 11 << endl; // 013
unshowbase
cancels the prefix:
cout << showbase << hex;
cout << 11 << endl; // 0xb
cout << unshowbase;
cout << 11; // b
hex
, oct
, and dec
can also be used with cin
:
int a, b, c;
cin >> a >> hex >> b >> oct >> c;
cout << a << " " << b << " " << c;
Input and output:
Input: 10 0xa 012
Output: 10 10 10
Input: 10 a 12
Output: 10 10 10
There are three output formats:
double num = 1234567890.123456789;
cout << num << "\n" // defaultfloat: 1.23457e+09
<< fixed << num << "\n" // fixed: 1234567890.123457
<< scientific << num << "\n"; // scientific: 1.234568e+09
Displays n digits after the decimal point: fixed
+ setprecision()
, which
requires the iomanip
library:
#include <iomanip>
double num = 1234567890.123456789;
cout << setprecision(12) << num << "\n" // 1234567890.12
<< fixed << num << "\n" // 1234567890.123456716537
<< scientific << num << "\n"; // 1.234567890123e+09
The setw()
function from the <iomanip>
library can be used to set the width
of the output. It’s not persistent, meaning it only affects the next output
statement. Here is an example:
const int w = 16;
cout << "|" << setw(w) << "Hello" << "|\n"; // | Hello|
cout << "|" << setw(w) << "123" << "|\n"; // | 123|
cout << "|" << setw(w) << "abc" << "|\n"; // | abc|
The <sstream>
header file provides the ability to manipulate strings as if
they were input and output streams. This can be useful for converting between
numeric and string representations or for formatting output.
Converting a string to a number can be done using an istringstream
object, like so:
istringstream is { s };
double d;
is >> d;
if (!is) throw runtime_error("double format error: " + s);
Converting a number to a string can be done using an ostringstream
object, like so:
ostringstream os;
int x = 12, y = 34;
os << "Point { " << x << ", " << y << " }";
string s = os.str();
The getline()
function can be used to input a line of text from the standard
input stream cin
. The function returns a string that does not include the newline character.
string l;
getline(cin, l);