std::cout#
控制符#
#include <iomanip>
| 控制符 | 描述 |
|---|---|
| dec | 置基数为10 |
| hex | 置基数为16 |
| oct | 置基数为8 |
| setfill(char) | 设置填充字符为c |
| setw(n) | 设置显示小数精度为n位 |
| fixed | 固定浮点数显示 |
| scientific | 指数表示 |
| left | 左对齐 |
| right | 右对齐 |
| skipws | 忽略前导空白 |
| uppercase | 十六进制数大写输出 |
| lowercase | 十六进制数小写输出 |
控制浮点数值显示#
#include <iostream>
#include <iomanip>
int main() {
const double e = 2.718281828;
// setprecision控制浮点数数字个数
// fixed控制小数点右边个数
// scientific用科学计数法表示浮点数
std::cout << "10位有效位数: " << std::setprecision(10) << e << std::endl;
std::cout << "定点方式(8位小数位): " << std::fixed << std::setprecision(8) << e << std::endl; std::cout << "指数形式(8位小数位): " << std::scientific << std::setprecision(8) << e << std::endl;
return 0;
}设置值的输出宽度#
如果一个值的显示数需要比setw(n)确定的字符数n更多,则该值将显示所有字符,例如
#include <iostream>
#include <iomanip>
int main() {
float amount = 3.14159;
std::cout << std::setw(4) << amount << std::endl;
return 0;
}如果一个值的字符数比setw(n)确定的字符个数更少,则在数字字符前显示空白。不同于其他控制符,setw(n)只影响下一个数值输出,如果要每一个数字都受到setw(n)控制,需要这样:
#include <iostream>
#include <iomanip>
int main() {
double pi = 3.1415926;
int radius_1 = 40;
double radius_2 = 928.335;
// 为了对齐,setw的值要设置为最长字符串的值
std::cout << std::left << std::setw( 15 ) << "size of double " << std::right
<< std::setw( 5 ) << sizeof( pi ) << " bytes" << std::endl;
std::cout << std::left << std::setw( 15 ) << "size of int " << std::right
<< std::setw( 5 ) << sizeof( radius_1 ) << " bytes" << std::endl;
return 0;
}输出八进制数和十六进制数#
#include <iostream>
#include <iomanip>
int main() {
int num = 1001;
std::cout << "Decimal: " << std::dec << num << std::endl;
std::cout << "Hexadecimal: " << std::hex << num << std::endl;
std::cout << "Octal: " << std::oct << num << std::endl;
return 0;
}设置填充字符#
#include <iostream>
#include <iomanip>
int main() {
std::cout << std::setfill('*');
std::cout << std::setw(2) << 21 << std::endl << std::setw(3) << 21 << std::endl << std::setw(4) << 21 << std::endl;
std::cout << std::setfill(' '); // NOTE: 恢复默认设置
return 0;
}左右对齐输出#
#include <iostream>
#include <iomanip>
using std::setw;
int main() {
std::cout << std::right; // NOTE: 右对齐
std::cout << setw(4) << 1 << setw(4) << 2 << setw(4) << 3 << std::endl;
std::cout << std::left; // NOTE: 左对齐
std::cout << setw(4) << 1 << setw(4) << 2 << setw(4) << 3 << std::endl;
return 0;
}强制显示小数点和符号#
当遇到浮点数除以整数可以整除时会简单显示整数位,忽略小数位
#include <iostream>
#include <iomanip>
int main() {
std::cout << 10.0 /5 << std::endl;
std::cout << std::showpoint << 10.0 / 5 << std::endl;
return 0;
}默认时,IO仅在负数之前显示值的符号
#include <iostream>
#include <iomanip>
int main() {
std::cout << 10 << " " << -20 << std::endl;
std::cout << std::showpos << 10 << " " << -20 << std::endl;
return 0;
}
