背景

C++中可以使用cout来输出。
但是cout输出一些格式化的数据非常麻烦。

比如:

hour,min和sec代表当前时间,需求:按12:00:00格式输出当前时间。

//使用cout输出
cout<<hour<<":"<<min<<":"<<sec<<endl;

问题:

  1. 这样输出比较麻烦,代码的阅读性也不高。
  2. 如果min是个位数,前面不方便加0。

Printf示例

//使用printf输出上面的问题
print("%d:%0.2d:%0.2d",hour,min,sec);

解释:

上面代码在熟悉时候阅读性高。
printf的第一个参数是字符串,字符串表示输出格式。
%d表示数据,从第2个参数开始,依次替换字符串中的%d。
%0.2d表示,如果数据是个位数,依旧输出两位数(在前面加0)。

Printf详解

从上面的例子可以看到,变量负责存储数据。
但是有的时候,同样的数据我们希望得到不同格式的输出。比如早上七点01分,使用cout就会变成7:1,我们希望得到的是7:01。
所以变量负责存储数据,printf负责格式输出。(同样的值可以得到不同格式输出)。

整数

占位符
%d  //输出十进制
%o //输出无符号整数的八进制
%x //输出无符号整数的十六进制(字母小写)
%X //输出无符号整数的十六进制(字母大写)
格式
%5d		//输出宽度为5(右对齐)
%-5d //输出宽度为5(左对齐)
%+5d //输出宽度为5(输出符号)
%05d //输出宽度为5(前面补0,而不是空格)
%#o //输出八进制前的0(进制前的标识符)
%#x //输出十六进制前的0x(进制前的标识符)
举例

例1:

int a=12;
printf("%d\n",a); //输出12

例2:

int a=12;
printf("%o\n",a); //输出14(因为十进制的12等于八进制的14)

例3:

int a=12;
printf("%x\n",a); //输出c(因为十进制的12等于十六局进制的c)

例4:

int a=12;
printf("%5d\n",a); //输出" 12"(默认右对齐,总共5个占位,前面补空格)

例5:

int a=12;
printf("%-5d\n",a); //输出"12 "(负号表示左对齐,总共5个占位,后面补空格)

例6:

int a=-12;
printf("%+5d\n",a); //输出" -12"(正号表示输出符号,而不是在前面加"+")

例7:

//%02d表示输出宽度为2,不足2则在前面补0。比如表示时间的时候:
int hour=12,min=3,sec=2;
printf("%02d:%02d:%02d\n",hour,min,sec); //输出"12:03:02"

小数

占位符
%f		//输出小数(保留到小数点后6位)
%e,E //科学计数法,保留到小数点后6位(1.234560e+02)
%g,G //以%f或%e中较短的输出宽度输出小数
格式
%10f	//输出宽度为10(多出不会被截断)
%10.3f //输出宽度为10(保留到小数点后3位)
举例

例1:

float a=1.2;
printf("%f\n",a); //输出1.200000

例2-科学计数法:

float a=1234567;
printf("%e\n",a); //输出1.234567e+06
//%e和%E分别表示用小写和大写的e表示

例3

当我们不知道变量用什么方式表示时,可以用%g表示。
比如,1.2如果用科学计数法来表示会非常繁琐:1.200000e+00
再比如,1234567用%f也会繁琐:1234567.000000
那么,用%g就能自动判断,以更好的方式表示。

float a=1234567,b=1.2;
printf("a=%g\n",a); //输出a=1.23457e+06
printf("b=%g\n",b); //输出b=1.2

char

占位符
%c		//输出单个字符
%s //输出字符串
举例

例1:

int a=65;
printf("%d\n",a); //输出65
printf("%c\n",a); //输出A

例2:

char * a="张三";
printf("我的名字是%s\n",a); //输出"我的名字是张三"

指针

%p		//输出指针指向的地址

举例:

int a=10;
int *p=&a;
printf("变量a的地址为%p\n",p); //输出"变量a的地址为0x7ffeefbff54c"

其他

%%		//输出%

C++之printf函数的更多相关文章

  1. 可变参数列表与printf()函数的实现

    问题 当我们刚开始学习C语言的时候,就接触到printf()函数,可是当时"道行"不深或许不够细心留意,又或者我们理所当然地认为库函数规定这样就是这样,没有发现这个函数与普通的函数 ...

  2. printf函数

    printf函数的格式及含义 d                    以十进制带符号的形式输出整数(对正数不输出符号) o                    以八进制无符号的形式输出整数(不输出 ...

  3. Linux Linux下特殊的printf函数和fputs函数

    Linux下,printf函数必须以'\n'结尾才会立刻输出到屏幕,如果没有'\n'直到输出缓冲区满了以后才会打印到屏幕上(敲击换行也算),如果需要不换行的输出,一般可以使用write函数代替.'\n ...

  4. 关于printf函数的所思所想

    缘起大一下学期,C语言程序设计徐小青老师的随口一提,经娄嘉鹏老师提醒,我觉得应该自己整理清楚这一问题.涉及网上资料将会标明出处. 关于printf函数的所思所想 * printf的定义 printf( ...

  5. C语言printf()函数:格式化输出函数

    C语言printf()函数:格式化输出函数 头文件:#include <stdio.h> printf()函数是最常用的格式化输出函数,其原型为:     int printf( char ...

  6. 关于printf函数输出先后顺序的讲解!!

    对于printf函数printf("%d%d\n",a,b);函数的实际输出顺序是这样的先计算出b,然后在计算a,接着输出a,最后在输出b:例子如下:#include<ios ...

  7. printf()函数

    printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息. printf()函数的调用格式为: printf("<格式化字符串>", <参 ...

  8. C 中 关于printf 函数中度剖析

    题外话  这篇博文主要围绕printf函数分析的,主要讲解printf 使用C的可变参数机制, printf是否可重入(是否线程安全), printf函数的源码实现. 正文 1.C中可变参数机制 我们 ...

  9. printf函数重定向

    printf函数底层会调用fputc函数 /*重定向c库函数printf到USART1*/ int fputc(int ch, FILE *f) { /*发送一个字节数据USART1 */ USART ...

  10. php中sprintf与printf函数用法区别

    下面是一个示例:四舍五入保留小数点后两位  代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...

随机推荐

  1. [PHP] 自定义 laravel/passport 的误区讲解

    Passport 的 Client 模型对应用户是默认的 User 模型.使用的 guards 是 api. 如果你发现自定义 passport 时总是调试不成功,那么很有可能是以下原因. /** * ...

  2. 01、Windows 排查

    Windows 分析排查 分析排查是指对 Windows 系统中的文件.进程.系统信息.日志记录等进行检测,挖掘 Windows 系统中是否具有异常情况 1.开机启动项检查 一般情况下,各种木马.病毒 ...

  3. JS对Cookie的应用--JavaScript实例集锦(初学)

    一个网站上的cookie信息可以实现下次自动登录,记录你的历史等等 可以在火狐浏览器查看本地代码的cookie信息: 打开火狐浏览器--点击右键--查看页面信息--安全--查看cookie <! ...

  4. leaflet叠加图片图层

    <!DOCTYPE html> <html> <head> <title>Layers Control Tutorial - Leaflet</t ...

  5. d3d12龙书阅读----绘制几何体(下)

    d3d12龙书阅读----绘制几何体(下) 本节在上一节的基础上,对整个绘制过程进行优化,将绘制单个几何体的内容拓展到了多个几何体,同时对根签名进行了进一步地探索. 帧资源 在之前绘制每帧的结尾,我们 ...

  6. 移动通信网络中的 GTP 协议

    目录 文章目录 目录 GTP GTP-C 协议(GTP 控制面) GTP-U 协议(GTP 用户面) GTP' 协议(计费传输) GTPv2 Header GTP GTP(GPRS Tunnellin ...

  7. 移动通信网络中的 3A 实现

    目录 文章目录 目录 3A RADIUS Diameter 基本概念 基本协议 应用协议 freeDiameter 3A AAA,即认证(Authentication).授权(Authorizatio ...

  8. 【源码】蚁群算法TSP问题可视化

    ACO.Visualization项目 本项目演示蚁群算法求解旅行商问题的可视化过程,包括路径上的信息素浓度.蚁群的运动过程等.项目相关的代码:https://github.com/anycad/AC ...

  9. docker/k8s常见错误处理

    启动docker失败,报错了 启动docker失败,报错了.Failed to load environment files: No such file or directory [root@mcwk ...

  10. redis持久化存储数据(rdb和aof)

    rdb持久化存储数据 总的 redis持久化 防止数据丢失,持久化到本地,以文件形式保存 持久化的方式 ,两种 aof和 rdb模式 1.触发机制, - 手动执行save命令 - 或者配置触发条件 s ...