标题:C语言库函数printf()解读
水墨不写bug
(图片来源于网络)
目录
(一)printf头文件解读
我们知道 printf函数的头文件是 <stdio.h> ,但是这个标志到底代表什么呢?
通过查阅C++参考网站,我们发现:
(图片来源cplusplus.com)
printf函数的头文件的名称就是标准输入输出的缩写(Standard Input and Output),后面的.h表示header,即头文件的缩写。
其实 stdio.h 这个函数库里的 部分 其他函数,与输入输出 都或多或少有联系:
(图片来源cplusplus.com)
这其中的一些函数我们十分熟悉,这就留到以后再给大家分享了。
(二)printf基本用法
printf中的 f (format 格式化),大致表明了printf函数的作用——将参数文本输出到屏幕,并且可以定制输出文本的格式。
(e.g.1)
#include<stdio.h>
int main()
{
printf("hello world!\n");//‘\n’是换行符
printf("%d个人走了进来,其中有%s",6, "zhangsan\n");//占位符与后面参数一一对应
return 0;
}
运行结果:
我们可以在“ ”内输入任意可打印字符,printf可按照我们规定的格式输出,需要注意的是,printf不会在行尾自动添加换行符,打印完毕后,光标停在最后一个字符末尾。
在e.g.1中出现了一个陌生的符号——%d和%s,它们其实是占位符。
(1)占位符
在使用printf时,我们会频繁使用占位符。
“占位符”,顾名思义,就是这个位置可以由其他值代入。
如果printf共使用了n个占位符,则此printf函数共有n+1个参数(它们以英文逗号隔开),第一个参数是“ ”里的内容,“ ”里可有占位符,但后面的参数需要一一对应。
e.g.1中的 “%d” 的位置就被 整数“6”替代。占位符的第一个字符一律是%,第二个字符表示占位符的类型,d 就代表这里代入的值必须是一个整数。“%s”的位置就被字符串“zhangsan”替代。s代表这里代入的值必须是一个字符串(英文:string);
i,占位符的类型(按字母顺序)
%a:十六进制浮点数,字母输出为小写
%A:同上,字母输出为大写
%c:字符
%d:十进制整数
%e:科学计数法的浮点数,指数部分e为小写
%E:同上,指数部分E为大写
%i:整数,基本等同于%d
%f:通常打印float,也可打印double,但会发生截断,若精度要求高,则不建议
%g:6位有效数字的浮点数,整数部分超过6位,自动转化为科学计数法,指数部分e为小写
(同时会损失部分精度)
%hd:十进制short int 类型
%ho:八进制short int 类型
%hx:十六进制short int 类型
%hu:unsigned short int 类型
%ld:十进制long int 类型
%lo:八进制long int 类型
%lx:十六进制lon int 类型
%lu:unsign long int 类型
%lld:十进制long long int 类型
%llo:八进制long long int 类型
%llx:十六进制long long int 类型
%llu:unsigned long long int 类型
%le:科学计数法表示long double 类型浮点数
%lf:double类型 long double类型
%o:八进制整数
%p:指针(地址)
%s:字符串
%u:unsigned int类型
%x:十六进制整数
%zd:size_t类型
%%:输出一个百分号
(内容来源:cpusplus.com)
红色标注为常用类型,其他的了解就行。
(2)printf的输出宽度
i,printf可限定占位符的最小宽度:
e.g.2
上述%6d ,表示这个占位符的宽度至少为5位,如果不满5位,默认右对齐,缺少的位上补上空格。
如果希望左对齐,空格统一放在右边,则加一个“-”,即%-6d。
ii,浮点型,小数点也占用一个宽度
总之,若规定printf打印长度是12,那么结果不满12个字符,则用空格补齐成12个字符,若结果超过12个字符,则打印真实结果,同时不违背小数部分保留6位。
如图:
也就是说:如果整数位+6个小数位超过12位,则打印真实结果。
(3)printf的保留精度
printf输出浮点数时,想要限定小数位数:
如果想要只保留整数位,则为:%.0f;
(在这种情况下,如果结果的值 > 0.5,最终打印输出为 1 ;如果结果的值 <= 0.5 ,最终打印输出为 0 ;)
如图:
结果如图:
但是如果超过float型的精度范围,就是结果超过0.5 ,也无法被识别 ,因此打印结果仍然是0;
结果:
如保留两位小数,可写为%.2f ;
如保留三位小数,可写为%.3f;
这种写法 可以与上文讲解的 限定宽度 结合使用,这里我就不给出例子了,大家也自己动手试一试,印象更深刻。
(4)printf输出总是保留正负号
默认情况下,printf不显示+号,只显示-号,若想不论正负,总是显示结果的符号 则在占位符%后加上一个“+”号。
如图:
(5)浮点输出函数化
printf输出浮点型时,最小宽度和小数位数这两个限定值,都可用 * 代替,通过printf函数的参数传入:
实际上,
输出宽度的 参数位置 可以是一个函数的返回值 !
小数位数的 参数位置 也可以是一个函数的返回值!
这也就奠定了printf根据要输出的数据需要来控制输出格式奠定了基础!
这样来看,printf函数的功能是不是强大起来了呢?
读到这里,不妨打开编译器试一试,将函数返回值作为参数来玩转printf函数!!!
最后的最后,还有printf函数的另一个功能:
(6)输出部分字符串
%s占位符用来输出字符串,如果想要输出规定长度的字符串,比如5个字符的字符串,可以表示为——%.5s,其中 “5”的位置可以是任意的正整数:
以上就是printf函数的基本功能了,希望这些总结与经验能对你有做帮助。
如果本文确实让你眼前一亮,请不要忘了支持哦~
未经作者同意禁止转载-