1、printf函数
printf库函数包含于头文件stdio.h中,使用时需引用该头文件
将 format 指向的 C语言字符串写入标准输出 (stdout)。如果 format 包含占位符(以 % 开头的子序列),则 format 后面的其他参数将被格式化并插入到结果字符串中,并替换掉它们各自对应的占位符。
以下面语句为例
char i='!';
printf("Hello world%c",i);
这里format指向的字符串为Hello world%c , 其中%c为占位符对应char类型,因format指向的字符串后面为char类型的参数i,那么i在格式化后替代%c,由于i为char类型,储存字符!因此格式化结果为!,由!替代%c
最后在屏幕上输出字符串Hello world!
这里应注意占位符一般应与后面参数的类型按顺序一一对应,例如上述代码中对应char类型的%c如果换成对应int类型的%d那么i格式化的结果为int类型的33(!的ASCII值),最后打印Hello world33
由此printf使用时基本格式如下
printf("字符 占位符 字符",参数);(字符和占位符间的空格不必要加,打印时空格会一并打印,这里为了方便观看加上空格)
如:
char i='b';
printf("a%cc",i);
即打印abc
当然这只是简单格式,具体控制将在(4)输出格式控制 中说明
(2)函数参数
printf有n个占位符即有n+1个参数,因为'' ''内的字符串算一个参数,而每个占位符对应一个参数,如上面提到的printf(''a%cc'',i);有两个参数分别是逗号左边的字符串和右边的char类型参数i
如果参数总数小于等于占位符数目,也就是说有占位符不对应参数,那么没有参数对应的这个占位符将输出内存中的该占位符对应类型的任意值,如%c将输出任意字符,%d将输出任意整型

(3)占位符
占位符为%开头的子序列
以下列举常见的占位符及对应的类型
占位符 对应的类型 补充说明
- %a 十六进制浮点数 输出时有字母则小写
- %A 十六进制浮点数 输出时有字母则大写
- %e 科学计数法的浮点数 指数的e小写
- %E 科学计数法的浮点数 指数的E大写
- %d 整型int
- %i 整数 基本等于%d
- %f 浮点数float或double scanf函数中不可混用
- %lf 双精度浮点数double
- %g %f或%e 根据数值的长度,选择以最短的方式输出 如 printf(''%g %g'',0.0000333,0.333);输出3.33e-05 0.333
- %G 同%g 指数E大写其他同%g
- %p (指针/地址)void* 打印地址,结果为十六进制
- %% 输出%
- %n int* 已输出的字符串数量,该占位符本身不输出,而将值存储于指定变量。如 int num=0;printf("ab%n",&num); printf("%d",num); 输出ab2
- %c char 单个字符
- %s char* 用于输出字符串直到遇到’\0‘,如printf("%s","abc'\0'ab");输出abc
- %z_d size_t类型 函数sizeof()返回值的类型
- %x 十六进制整数
- %o 八进制整数
- %u 无符号整型unsigned int
- %hd 十进制short int
- %ho 八进制short int
- %hx 十六进制short int
- %hu unsigned short int
- %ld 十进制long int
- %lo 八进制long int
- %lx 十六进制long int
- %lu unsigned long int
- %lld 十进制long int
- %llo 八进制long int
- %llx 十六进制long int
- %llu unsigned long int
- %Le 科学计数法表示的long double
- %Lf long double浮点数
(4)输出格式控制
一般常见的printf占位符输出的控制形式如下
printf("%[标志][最小宽度][.精度]类型",参数);
标志,最小宽度和精度顺序固定,不需要某一项的限制时省略该项即可
另外,像%类型 例如%c又叫格式说明符。
例如

这里0为标志,代表空位由0填充,去掉0这个标志打印结果为 0.33即3个空格与0.33
7为最小宽度,代表宽度为7,如果结果位数少于7位空缺位数由空格填充,大于7位则按结果实际位数输出,这里由于有标志0 因此由0代替空格填充空缺位数。另外小数点也占一位。
.2代表精度 意思为保留两位小数
f为浮点类型
i为浮点类型的参数
另外,由上述例子可知限制最小宽度时,默认右对齐
如:printf("%5d",10);这里限制最小宽度为5,参数10占两位,根据右对齐打印 10,
如果需要左对齐需添加标志 - (与负号的-一样)即printf("%-5d",10);即可左对齐打印
打印10 。
ps:
1)标志总结
字符 -
字符名 负号
作用 结果左对齐,右边填空格
字符 +
字符名 加号
作用 使正数输出时加上正号,负数正常输出
字符 空格
字符名 空格
作用 输出为正时加上空格,为负时正常输出
字符 #
字符名 井号
作用:
type是o、x、X时,增加前缀0、0x、0X。
type是a、A、e、E、f、g、G时,额外输出一个小数点。如果使用.0控制不输出小数部分,则不输出小数点。
type是g、G时,尾部的0保留。
字符 0
字符名 数字零
作用 将输出空缺的部分补零而不补空格,不可搭配-使用
ps:
2)其他控制位数方法
通过*控制
例如
printf("%*.*f",6,2,0.5);与printf("%6.2f",0.5);等价
注意这里%*.*f整体为占位符
ps:
3)字符串部分输出
%s默认输出'\0'前的所有字符串
通过.[m]输出部分字符串,这里[m]为一个数字
如printf("%.3s","abcd");打印字符串前三个字符即abc
(5)函数返回值
打印成功后,将返回写入的字符总数。
如果发生写入错误,则设置错误指示符 (ferror) 并返回负数。
如果在写入宽字符时出现多字节字符编码错误,则 errno 设置为 EILSEQ 并返回负数。
如
int i=printf("abc");
最后i的值为3
printf("%d",printf("%d",printf("%d",43)));
打印4321


1万+

被折叠的 条评论
为什么被折叠?



