格式输出控制符
printf的格式控制的完整格式:% - 0 m.n l或h:
- %:格式说明的起始符号,不可缺少。
- -: 有-表示左对齐输出,如省略表示右对齐输出。
- 0:有0表示指定空位填0,如省略表示指定空位不填。
- m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。未指定n时,隐含的精度为n=6位。
针对字符输出,%m.ns:输出占m列,但只取字符串中左端n个字符。 - l:l对整型指long型,对实型指double型。
- h:用于将整型的格式字符修正为short型。
格式输出数据类型控制
- d格式:用来输出十进制整数。%ld:输出长整型数据。%md:m为指定的输出字段的宽度。
- o格式:以无符号八进制形式输出整数。对长整型可以用”%lo”格式输出。同样也可以指定字段宽度用“%mo”格式输出。
- x格式:以无符号十六进制形式输出整数。对长整型可以用”%lx”格式输出。同样也可以指定字段宽度用”%mx”格式输出。
- u格式:以无符号十进制形式输出整数。对长整型可以用”%lu”格式输出。同样也可以指定字段宽度用“%mu”格式输出。
- c格式:输出一个字符。
- s格式:用来输出一个字符串
- f格式:用来输出实数(包括单、双精度),以小数形式输出。
- e格式:以指数形式输出实数。
- g格式:自动选f格式或e格式中较短的一种输出,且不输出无意义的零。
m.n格式另一种表述
对于m.n的格式还可以用如下方法表示:
printf(“%*.*s\n”,m,n,ch);
前边的*定义的是总的宽度,后边的定义的是输出的个数。
分别对应外面的参数m和n 。
这种方法的好处是可以在语句之外对参数m和n赋值,从而控制输出格式。
例如:函数接口传给你一个没有“\0”结尾的字符串str和他的长度str_len,调试的时候你需要将其打印出来。
printf("%.*s\n", str_len, str);
printf输出字符串长度
输出格式 %n 可以将所输出字符串的长度值赋绐一个变量:
int slen;
printf(“hello world%n”, &slen);
执行后变量slen被赋值为11。
输出颜色
printf("\033[31m test print color \033[0m\n");
示例
printf("%3s, \n%7.2s, \n%.4s, \n%-5.3s\n", "PRINTF", "PRINTF", "PRINTF", "PRINTF");
gcc main.c
./a.out
PRINTF,
PR,
PRIN,
PRI
解析如下:
- %s原样输出字符串: %s
- %ns输出指定长度n的字符串, 超长时不截断, 不足时右对齐: %3s
- %m.ns输出指定长度的字符串, 超长时截断, 不足时右对齐,m为最终的字符串输出长度,n为从参数字符串中取出的子串长度: %7.2s
- %.ns输出指定长度的字符串, 超长时截断,不足时右对齐: %.4s; 如果使用 %.8s 与%s %3s效果一样
- %-m.ns输出指定长度的字符串, 超长时截断, 不足时左对齐: %-5.3s
通过上述用例,所谓超长时截断用到的n并不是只在超长时才起作用,而是不管你有没有超长,都必须截取这么长。
上述m,n是可以动态指定的,方法是用*代替m或者n,然后在参数列表里加上一个数字参数