背景

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. 关于C语言中printf函数“输出歧视”的问题

    目录 关于C语言中printf函数"输出歧视"的问题 问题描述 探索问题原因 另一种研究方法 问题结论 关于C语言中printf函数"输出歧视"的问题 问题描述 ...

  2. c语言自定义char*函数返回值是乱码_[每日C语言」printf()函数的修饰符和返回值...

    在上一个小demo<printf()函数(1)>中主要说了一下printf()函数的转换说明符,这些转移说明符是可以被修饰的.我们可以在%d和定义的转义字符之间通过插入修饰符对基本的转换说 ...

  3. c程序设计语言中printf,编程序 用getchar函数读入两个字符c1和c2,然后分别用putchar和printf函数输出这两个字符。请问...

    编程序,用getchar函数读入两个字符给c1和c2,然后分别用putchar和printf函数输出这两个字符.请问: 1. 变量C1,C2应定义为字符型或整型?或二者皆可? 答:在这个题目里,变量C ...

  4. php 格式化评论量函数,深入剖析PHP中printf()函数格式化使用

    printf()函数优点在于可以格式化输出! printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少. ② ...

  5. STM32中关于串口通信的printf()函数重定向问题

    在STM32串口通信程序中使用printf()函数发送数据非常方便,但是需要先进行简单的配置,下面介绍两种配置方法. 方法一.对工程属性进行配置 第1步:在main.c中包含"stdio.h ...

  6. scanf函数和printf函数

    C程序实现输出和输入的 主要是printf函数 和 scanf函数,这两个函数是格式输入输出 格式声明由%和格式字符组成 如%d,%f 格式字符:  d格式符:用来输出一个有符号的十进制整数  c格式 ...

  7. C中printf函数的实现原理

    一.printf函数的实现原理 在C/C++中,对函数参数的扫描是从后向前的.C/C++的函数参数是通过压入堆栈的方式来给函数传参数的(堆栈是一种先进后出的数据结构),最先压入的参数最后出来,在计算机 ...

  8. 用宏定义代替printf函数

    问题提出 有时候我们想用宏定义来决定是编译debug版本的代码还是release的代码,dubug版本的代码会通过printf打印调试信息,release版本的代码则不会.我们总不能对每一条print ...

  9. C语言程序设计基础及应用实例---第一节 printf函数的使用

    (1)printf函数打印字符串 #include <stdio.h>int main(void) {printf("Helloworld!\r\n");return ...

  10. PIC中实现printf函数出现:Warning [2066] type qualifier mismatch in assignment

    为什么会出现"Warning [2066] type qualifier mismatch in assignment"(警告[2066] 指定的类型限定符不匹配)? 解答:    ...

最新文章

  1. PHP PSR-2 代码风格规范 (中文版)
  2. php视频录制插件,Chrome浏览器录屏扩展插件
  3. Spring的7种事务传播行为类型
  4. 计算机二级考试vb知识点,2016计算机二级《VB》考试重要知识点
  5. MySQL列转行sql语句
  6. AndroidManifest.xml详解
  7. 2012二级java真题_2012年计算机二级JAVA模拟试题及答案详解汇总
  8. base64 string 放不下_String、byte[]、Base64相互转换,不要再用错了
  9. Julia: Array 很不同!
  10. 【娜家花园养花小记】
  11. 近期流行手机病毒“手机骷髅”解决方案
  12. java研发手机归属地批量查询
  13. 21700电池的优势和不足
  14. Intel核芯显卡微架构浅析
  15. 点线面的特点_设计三神器!点线面的基本特点与表现
  16. 计算机存储容量用K还是KB,计算机中容量单位B、KB、MB、GB和TB的关系
  17. CPU和内存之间关系的演变
  18. onedrive电脑手机不同步_onedrive无法同步
  19. Linux—ps命令
  20. 用数组存储三个学生对象,并遍历数组

热门文章

  1. Web收银台系统[项目] -- (3) 登录页面
  2. 怎样卸载干净eclipse_eclipse卸载又重新安装之曲折心路
  3. Eclipse的卸载
  4. CloudCompare中CCCoreLib模块介绍
  5. tess4J 安装使用
  6. OpenCV——PS 滤镜, 曝光过度
  7. sudoers的深入介绍与用户权限控制
  8. Java8 新特性自用总结
  9. BSS、OSS和MSS(BOSS和MBOSS)
  10. RFID reader impinj r420 inventory