C语言printf()格式化输出
printf()函数
请求printf()函数打印数据的指令要与待打印数据的类型相匹配。例如,打印整数时使用%d,打印字符时使用%c。这些符号被称为转换说明(conversion specification),它们指定了如何把数据转换成可显示的形式。
常用输出格式化转换说明:
* %a 浮点数、十六进制数* %A 浮点数、十六进制数* %c 单个字符* %d 有符号十进制整数* %e 浮点数、e记数法* %E 浮点数、e记数法* %f 浮点数、十进制记数法* %g 根据值的不同自动选择%f或%e* %i 与%d相同* %o 无符号八进制整数* %p 指针* %s 字符串* %u 无符号十进制整数* %x 无符号十六进制整数,使用十六进制数of* %X 无符号十六进制整数,使用十六进制数OF* %% 打印一个百分号
printf()函数的格式:
printf( 格式字符串, 待打印项1, 待打印项2,...);
注:格式字符串中的转换说明一定要与后面的每个项相匹配
printf("Farewell! thou art too dear for my possessing,\n");
printf("%c%d\n", '$', 2 * cost);
待打印列表的第1个项是一个字符常量,不是变量;第2个项是一个乘法表达式。这说明printf()使用的是值,无论是变量、常量还是表达式的值。
printf()的转换说明修饰符
说明:在%和转换字符之间插入修饰符可修饰基本的转换说明。
修饰符 | 含义 |
标记 |
5种标记(-、+、空格、#和0),可以不使用标记或使用多个标记 示例:“%-10d” |
数字 |
是最小字段宽度,如果该字段不能容纳待打印的数字或者字符串,系统会使用更宽的字段 示例:“%4d“ |
.数字 |
精度 对于%e、%E和%f转换,表示小数点右边数字的位数 对于%g和%G转换,表示有效数字最大位数 对于%s转换,表示待打印字符的最大数量 对于整形转换,表示待打印数字的最小位数 如有必要,使用前导0来达到这个位数 只使用 . 表示其后跟随一个0,所以%.f和%.0f相同 示例:%5.2打印一个浮点数,字段宽度为5字符,其中小数点后有两位数字 |
h |
和整形转换说明一起使用,表示short int或unsigned short int类型的值 示例:%hu、%hx、%6.4hd |
hh |
和整形转换说明一起使用,表示signed char或unsigned char类型的值 示例:%hhu、%hhx、%6.4hhd |
j |
和整形转换说明一起使用,表示intmax_t或unintmax_t类型的值.这些类型定义在stdint.h中 示例:%jd、%8jx |
l |
和整形转换说明一起使用,表示long int或unsigned long int类型的值 示例:%ld、%8lu |
ll |
和整形转换说明一起使用,表示long long int或unsigned long long int类型的值(C99标准) 示例:%lld、%8llu |
L |
和浮点转换说明一起使用,表示long double类型的值 示例:%Lf、%10.4Le |
t |
和整形转换说明一起使用,表示ptrdiff_t类型的值。ptrdiff_t是两个指针差值的类型(C99标准) 示例:%jd、%8jx |
z |
和整形转换说明一起使用,表示size_t类型的值。size_t是sizeof返回的类型(C99标准) 示例:%zd、%12zd |
标记
标记 | 含义 |
- |
待打印项左对齐。即,从字段的左侧开始打印该项 示例:%-20s |
+ |
有符号值若为正,则在值前面显示加号;若为负,则在值前面显示减号 示例:%+6.2f |
空格 |
有符号值若为正,则在值前面显示前导空格(不显示任何符号);若为负,则在值前面显示减号+标记并覆盖空格 示例:%6.2f |
# |
把结果转换成另一种形式。如果是%o格式,则以0开始;如果是%x或%X格式,则以0x或0X开始;对于所有的浮点格式,#保证了即使后面没有任何数字,也打印一个小数点字符。对于%g和%G格式,#防止结果后面的0被删除 示例:%#o、%#8.0f、%+#10.3e |
0 |
对于数值格式,用前导0代替空格填充字段宽度。对于整数格式,如果出现-标记或指定精度,则忽略该标记 示例:%010d、%08.3f |
代码示例
/* width.c -- 字段宽度 */
#include <stdio.h>
#define PAGES 959
int main(void)
{printf("*%d*\n", PAGES);printf("*%2d*\n", PAGES);printf("*%10d*\n", PAGES);printf("*%-10d*\n", PAGES);return 0;
}
运行结果:
第1个转换说明%d不带任何修饰符,其对应的输出结果与带整数字段宽度的转换说明的输出结果相同。在默认情况下,没有任何修饰符的转换说明,就是这样的打印结果。
第2个转换说明是%2d,其对应的输出结果应该是2字段宽度。因为待打印的整数有3位数字,所以字段宽度自动扩大以符合整数的长度。
第3个转换说明是%10d,其对应的输出结果有10个空格宽度,实际上在两个星号之间有7个空格和3位数字,并且数字位于字段的右侧。
最后一个转换说明是%-10d,其对应的输出结果同样是10个空格宽度,-标记说明打印的数字位于字段的左侧。熟悉它们的用法后,我们就能很好地控制输出格式。试着改变PAGES的值,看看编译器如何打印不同位数的数字。
// floats.c -- 一些浮点型修饰符的组合
#include <stdio.h>
int main(void)
{const double RENT = 3852.99; // const变量printf("*%f*\n", RENT);printf("*%e*\n", RENT);printf("*%4.2f*\n", RENT);printf("*%3.1f*\n", RENT);printf("*%10.3f*\n", RENT);printf("*%10.3E*\n", RENT);printf("*%+4.2f*\n", RENT);printf("*%010.2f*\n", RENT);return 0;
}
运行结果:
本例的第1个转换说明是%f。在这种情况下,字段宽度和小数点后面的位数均为系统默认设置,即字段宽度是容纳待打印数字所需的位数和小数点后打印6位数字。
第2个转换说明是%e。默认情况下,编译器在小数点的左侧打印1个数字,在小数点的右侧打印6个数字。这样打印的数字太多!解决方案是指定小数点右侧显示的位数,程序中接下来的4个例子就是这样做的。请注意,第4个和第6个例子对输出结果进行了四舍五入。另外,第6个例子用E代替了e。
第7个转换说明中包含了+标记,这使得打印的值前面多了一个代数符号(+)。0标记使得打印的值前面以0填充以满足字段要求。注意,转换说明%010.2f的第1个0是标记,句点(.)之前、标记之后的数字(本例为10)是指定的字段宽度。
/* flags.c -- 演示一些格式标记 */
#include <stdio.h>
int main(void)
{printf("%x %X %#x\n", 31, 31, 31);printf("**%d**% d**% d**\n", 42, 42, -42);printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6, 6);return 0;
}
运行结果:
第1行输出中,1f是十六进制数,等于十进制数31。第1行printf()语句中,根据%x打印出1f,%X打印出1F,%#x打印出0x1f。
第2行输出演示了如何在转换说明中用空格在输出的正值前面生成前导空格,负值前面不产生前导空格。这样的输出结果比较美观,因为打印出来的正值和负值在相同字段宽度下的有效数字位数相同。
第3行输出演示了如何在整型格式中使用精度(%5.3d)生成足够的前导0以满足最小位数的要求(本例是3)。然而,使用0标记会使得编译器用前导0填充满整个字段宽度。最后,如果0标记和精度一起出现,0标记会被忽略。
/* stringf.c -- 字符串格式 */
#include <stdio.h>
#define BLURB "Authentic imitation!"
int main(void)
{printf("[%2s]\n", BLURB);printf("[%24s]\n", BLURB);printf("[%24.5s]\n", BLURB);printf("[%-24.5s]\n", BLURB);return 0;
}
运行结果:
注意,虽然第1个转换说明是%2s,但是字段被扩大为可容纳字符串中的所有字符。还需注意,精度限制了待打印字符的个数。.5告诉printf()只打印5个字符。另外,-标记使得文本左对齐输出。
C语言printf()格式化输出相关推荐
- c++ 输出二进制_C语言 printf 格式化输出的详细示例
printf 是C语言非常有用的一个函数,也是我们入门学习C语言的第一个函数.掌握 printf 的格式化输出,对后续的学习非常有帮助. 在程序中要使用 printf,必须要包含头文件 stdio.h ...
- C语言 printf格式化输出,参数详解
有关输出对齐 int main(int argc, char* argv[]) { char insertTime[20] = {"1234567890"}; double i ...
- C语言 printf 格式化 输出 右对齐补零
C语言IO--printf右对齐补零 关于printf的一点总结,内容来自http://blog.sina.com.cn/s/blog_5ac88b350100auna.html 1.1 标准输入输 ...
- C语言printf格式化输出汇总
之前用格式化输出时,只记住了常用的几个.其实printf的格式化输出有很多,这里分享给大家: printf函数 头文件 #include <stdio.h> 函数原型 int printf ...
- c语言printf输出字母,C语言printf()格式化输出控制
printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息.在编写程序时经常会用到此函数.printf()函数的调用格式为: printf("", ); 其中格 ...
- 【C/C++】printf格式化输出-科学计数法形式的浮点数
C语言printf格式化输出修饰符 printf()的格式符 转换说明 输出 %a, %A 浮点数.十六进制数和p-计数法(C99) %c 一个字符 %d 有符号十进制数 %e, %E 浮点数,e计数 ...
- C语言scanf()函数格式化输入和printf()格式化输出。
scanf函数格式化输入和printf格式化输出 要实现的功能如下 完整源代码实现如下 要实现的功能如下 scanf函数格式化输入字符串和字符,printf格式化输出字符串和字符. 完整源代码实现如下 ...
- Go语言基础--Printf格式化输出、Scanf格式化输入详解
几种输出方式的区别 Print.Println .Printf .Sprintf .Fprintf都是fmt 包中的公共方法,在需要打印信息时需要用到这些函数,那么这些函数有什么区别呢? Print: ...
- matlab printf格式化输出,Shell printf格式化输出命令
printf 是 awk 的重要格式化输出命令,本节我们先介绍一下 printf 命令如何使用. 需要注意,在 awk 中可以识别 print 输出动作和 printf 输出动作(区别是:print ...
- Shell printf格式化输出命令
printf 是 awk 的重要格式化输出命令,本节我们先介绍一下 printf 命令如何使用. 需要注意,在 awk 中可以识别 print 输出动作和 printf 输出动作(区别是:print ...
最新文章
- 人群分析--ResnetCrowd: A Residual Deep Learning Architecture
- ZJU PAT 1027 Colors in Mars
- 鸿蒙可胜安卓,【鸿蒙币谈】币圈投资中八大见顶信号,让你抓住最佳买卖机会!...
- vim 的tabnew带来的惊喜-建立多标签
- python如何输出百分比的数字_Python如何输出百分比
- 用爬虫实现验证码识别并模拟登陆和cookie操作、代理操作、线程池
- 【OpenCV】入门学习资料汇总
- 计算机组成原理学习 笔记一
- linux 查看网络流量
- 新增四则运算用户选择功能小程序
- 常用服务和开放端口对照表
- 苹果mac装双系统对电脑有影响吗?Mac电脑装双系统的利与弊
- 百度地图标注点+搜索
- 中国IT互联网行业线下峰会清单
- ardupilot python之px_uploader.py学习
- 链家网页爬虫_分享最近做的一个链家二手房爬虫和对爬到的数据进行可视化分析的案例...
- Linux tips
- Genome Aggregation Database (gnomAD) 简介 | 参考人群等位基因频率数据库
- 【数据结构】队列(链队列、循环队列)的存储结构及基本运算(C语言)
- 在大学时的分布式数据库读书笔记 拿出来分享