背景

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. dotnet OpenXML 解析 PPT 图表 解析日期时间表示内容

    在 OpenXML 里的图表存放的日期时间很多存放的是数值,需要进行转换才能获取到用户可见的字符串 日期在 OpenXML 里可以使用数值存放,需要根据数值和格式化字符串转换为用户可见的字符串 如以下 ...

  2. VisualStudio 调试时会不断刷新 WPF 应用渲染

    在 VisualStudio 附加调试和没有用 VisualStudio 附加调试时,对应用程序是有不同的影响,如 VisualStudio 设计器将会在附加调试 WPF 应用的时候,不断刷新 WPF ...

  3. 大模型必备 - 中文最佳向量模型 acge_text_embedding

    近期,上海合合信息科技股份有限公司发布的文本向量化模型 acge_text_embedding 在中文文本向量化领域取得了重大突破,荣获 Massive Text Embedding Benchmar ...

  4. java后台@RequestBody和@RequestParam

    RequestBody 接收的是请求体里面(body)的数据 RequestParam接收的是key-value里面的参数,所以它会被切割进行处理从而可以是普通元素.数组.集合.对象等接收 get-- ...

  5. 如此丝滑的API设计,用起来真香

    分享是最有效的学习方式. 博客:https://blog.ktdaddy.com/ 故事 工位上,小猫一边撸着代码,一边吐槽着前人设计的接口. 如下: "我艹,货架模型明明和商品SKU模型是 ...

  6. xFormers

    xFormers可以加快图像生成速度(几乎快两倍)并使用更少的 GPU 内存.它被广泛使用并且工作得很好,但与您之前生成的图像相比,它有时会生成不同的图像(对于相同的提示+设置). 重要的!!xFor ...

  7. Avalonia中的线性渐变画刷LinearGradientBrush

    在WPF中使用Shape实现复杂线条动画后,尝试在Avalonia中也实现同样效果.尽管官方提供了从WPF到Avalonia的快速入门文档,但由于第一次使用Avalonia,体验过程中并不是很顺利,主 ...

  8. Ceph 架构以及部署

    目录 Ceph架构 存储类型 为什么用到Ceph? 1. NFS 2. MooseFS MooseFS瓶颈 3. GlusterFS 4. Ceph Ceph的组件 Ceph部署 前期准备 1.1 修 ...

  9. 使用Newtonsoft.Json进行Json与XML相互转换

    XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析好像没啥难度.今天突然发现Newtonsoft.Json中有关于Json和XML互转的方法,所以顺带记录总结一下. 一.关于Newtons ...

  10. 安装centos7模板机[正常版]

    1. 安装centos 7模板机 准备好centos7的镜像 下载地址:http://mirrors.aliyun.com/centos/7/isos/x86_64/ 安装centos 自定义硬件: ...