C++ 格式化输出

Part.I Introduction

本篇博文主要整理一下 C++ 格式化输出的方式。

Part.II 输出控制

Chap.I 基础知识

关于输出流,一般有三种:cout, cerr, clog,它们的区别如下:

  • cout经过缓冲后输出,默认情况下是显示器。这是一个被缓冲的输出,是标准输出;它在内存中对应开辟了一个缓冲区,用来存放流中的数据,当向cout流插入一个endl,不论缓冲区是否满了,都立即输出流中所有数据,然后插入一个换行符。可以被输出到文件,即可以重定向输出
  • cerr不经过缓冲而直接输出,一般用于迅速输出出错信息,是标准错误,默认情况下被关联到标准输出流,但它不被缓冲,也就说错误消息可以直接发送到显示器,而无需等到缓冲区或者新的换行符时,才被显示。
  • clog流也是标准错误流,作用和cerr一样,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息存放在缓冲区,缓冲区满或者遇到endl时才输出。

控制输出格式的函数有如下几个:

函数 含义
dec 设置整数为十进制 全局的 默认
hex 设置整数为十六进制 全局的
oct 设置整数为八进制 全局的
setbase(n) 设置整数为n进制(n=8,10,16)
setw(14) 设置下一个输出对象输出长度为14,对象长度不够右对齐前补空格
setfill('*') 用过setw(n)之后,长度不够前补* 全局的
setprecision(3) 设置下一个输出对象精度保留小数点后3位
fixed 设置浮点数以固定的小数位数显示
scientific 设置浮点数以科学计数法表示
left 输出左对齐 全局的
right 输出右对齐 全局的 默认
skipws 忽略前导空格
uppercase 在以科学计数法输出E与十六进制输出X以大写输出,否则小写。
showpos 输出正数时显示+
showpoint 强制显示小数点
resetiosflags() 终止已经设置的输出格式状态,在括号中应指定内容(不懂TODO)

注:

  • 需要加头文件 #include <iomanip>
  • 全局的:表示本次的设置一直延续,直到改变设置为止。

二进制输出
C++ 的 cout 可以实现直接输出八进制、十进制和十六进制数据,但是不支持直接的二进制输出,需要调用<bitset>的库函数。下面是一个使用示例:

#include <bitset> 
#include <iostream>

using namespace std;
cout << "8.25的2进制: " << bitset<64>(8.25) << endl;
// ----------- 输出如下 ----------- 
92 进制: 1001
// 其中 bitset<n> 中的 n 控制输出二进制的位数

ps:小数的二进制如何输出呢?


Chap.II 使用示例

保留小数点后三位

cout << fixed << setprecision(3) << 5.564854 << endl;
// ------------ output -------------
5.565

控制输出长度为 10,长度不够前补 -,十六进制输出

cout << setw(10) << setfill('-') << hex << 56 << endl;
// ------------ output -------------
--------38

数字转字符,位数不够前补零;输出长度为 10,长度不够补*;左对齐输出

扫描二维码关注公众号,回复: 15873342 查看本文章
int num = 1024; char strNum[64];
sprintf_s(strNum, 64, "%05d", num);
cout << setw(10) << setfill('*') << left << strNum << endl;
// ------------ output -------------
01024*****

猜你喜欢

转载自blog.csdn.net/Gou_Hailong/article/details/130392170