int main(){ ..._printf("\\")输出">
赞
踩
在学尚硅谷C语言视频时,想自己先把他说的项目写一遍在去看他的视频,突然发现我对printf输出就只会%d,%f之类的,所以就在这里总结一下。
据我统计,正常的可视ASCII(码值为32-126之间)的字符,据我测试的就这些不能只有下面四个不能直接输出,其它均可通过键盘输入用printf函数直接打印出来。
" | \" |
% | %% |
' | \' |
\ | \\ |
代码:
- #include <stdio.h>
-
- int main()
- {
- printf("特殊字符输出格式:\n"
- "\" "
- "%% "
- "\' "
- "\\ ");
-
- return 0;
- }
现象:
从百度百科可知,带%号的格式为:
%[flags][width][.precision][length]specifier,即:%[标志][最小宽度][.精度][类型长度]说明符,具体说明(下面均摘自百度百科):
标志 | 规定输出样式 |
最小宽度 | 控制显示字段长度的宽度 |
精度 | 指定输出精度 |
类型长度 | 控制待输出数据类型的长度 |
说明符 | d,i,u之类的符号,表示输出类型 |
我们再从常用到少用的顺序一个一个说明。
说明符 | 对应数据类型 | 描述 |
d/i | int | 输出类型为有符号的十进制整数,i 是老式写法(现在均可使用) |
o(小写) | unsigned int | 输出类型为无符号八进制整数(没有前导 0) |
u | unsigned int | 输出类型为无符号十进制整数 (单独的u不要加d) |
x/X | unsigned int | 输出类型为无符号十六进制的整数,x 对应的是 abcdef,X 对应的是 ABCDEF (没有前导 0x 或者 0X) |
f/lf | double | 输出类型为十进制表示的浮点数,默认精度为6(lf 在 C99 开始加入标准,意思和 f 相同) |
e/E | double | 输出类型为科学计数法表示的数,此处 "e" 的大小写代表在输出时用的 “e” 的大小写,默认浮点数精度为6 |
g/G | double | 根据数值不同自动选择 %f 或 %e/%E,%e /%E格式在指数小于-4或指数大于等于精度时用使用 (据我试验,当正数据超过7位数,负数据超过4位时才会是%e输出) |
c | char | 输出类型为字符型。可以把输入的数字按照相应ASCII转换为对应的字符 |
s | char * | 输出类型为字符串。输出字符串中的字符直至遇到字符串中的空字符(字符串以 '\0‘ 结尾,这个 '\0' 即空字符)或者已打印了由精度指定的字符数 |
p | void * | 以16进制形式输出指针 |
% | 不转换参数 | 不进行转换,输出字符‘%’(百分号)本身 |
n | int * | 到此字符之前为止,一共输出的字符个数,不输出文本(我用Windows下的qt,vs code,都无法使用,但在老版Linux系统下可以使用,但是需要另一个变量去接收,见下图) |
其它的测试代码:
- #include <stdio.h>
-
- int main()
- {
- int numid=666;
- unsigned int numo=012;//0在整数最前面是指该数据是八进制形式的数据
- unsigned int numu=-1;//-1可表示无符号数中最大数
- unsigned int numox=0x12ab;
- float numf=12345678912345678.212000;//下面数据异常是因为数据太大单精度的精度已经无法表示了
- double numlf=12345678912345678.212000;//下面数据异常是因为数据太大双精度的精度也无法精确到小数(用这么大的数是为了验证%f和%lf输出是一样的)
- double numg=2,numG=-10001.88699999999966111;
- char charc=49;//也就是字符'1'
- // int num=0;
- // int i=0;
-
- printf("带%%号格式输出:\n");
- printf("%i %d\n"
- "%o\n"
- "%u\n"
- "%x %X\n"
- "%f %lf %f %lf\n"
- "%e\n"
- "%g %G\n"
- "%c\n"
- "%s\n"
- "%p\n"
- "%%\n",
- numid,numid,
- numo,
- numu,
- numox,numox,
- numf,numf,numlf,numlf,
- numlf,
- numg,numG,
- charc,
- "hello",
- numid);
-
- // printf("this%n",&num);
- // i=num;
- // printf("\n%d\n",i);
-
- return 0;
- }
现象:
width(最小宽度) | 字符名称 | 描述 |
---|---|---|
digit(n) | 数字 | 字段宽度的最小值,如果输出的字段长度小于该数,结果会用前导空格填充;如果输出的字段长度大于该数,结果使用更宽的字段,不会截断输出 |
* | 星号 | 宽度在 format 字符串中规定位置未指定,使用星号标识附加参数,指示下一个参数是width(使用形式:printf("%*d\n", 7, intx2),需要在前面多加一个参数7) |
代码:
- #include <stdio.h>
-
- int main()
- {
- int intx1=999999,intx2=999;
-
- printf("---%5d---%5d---\n",intx1,intx2);
- printf("%*d\n", 7, intx2);//将*换为7,相当于printf("%7d",intx2);
- return 0;
- }
现象:
flags(标志) | 字符名称 | 描述 |
---|---|---|
-[最小宽度] | 减号 | 在给定的字段宽度内左对齐,右边填充空格(默认右对齐)(可以和上面的最小宽度一起记,刚好相反) |
+ | 加号 | 强制在结果之前显示加号或减号(+ 或 -),即正数前面会显示 + 号; 默认情况下,只有负数前面会显示一个 - 号 |
(空格) | 空格 | 输出值为正时加上空格,为负时加上负号 [3] |
# | 井号 | specifier 是 o、x、X 时,增加前缀 0、0x、0X; specifier 是 e、E、f、g、G 时,一定使用小数点; specifier 是 g、G 时,尾部的 0 保留 |
0 | 数字零 | 对于所有的数字格式,使用前导零填充字段宽度(如果出现了减号标志或者指定了精度,则忽略该标志) |
代码:
- #include <stdio.h>
-
- int main()
- {
- int intx1=999999,intx2=9;
- int intx3=-1;
-
- printf("___%-5d___%-5d___\n",intx1,intx2);
- printf("___%+d___%+d___\n",intx2,intx3);
- printf("___% d___% d___\n",intx2,intx3);
- printf("___%#o___%#o___\n",intx2,intx2);
- printf("___%-05d___%05d___\n",intx2,intx2);
- return 0;
- }
现象:
.precision(精度) | 字符名称 | 描述 |
---|---|---|
.digit(n) | 点+数字 | 对于整数说明符(d、i、o、u、x、X):precision 指定了要打印的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符; 对于 e、E 和 f 说明符:要在小数点后输出的小数位数; 对于 g 和 G 说明符:要输出的最大有效位数; 对于 s 说明符:要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符; 对于 c 说明符:没有任何影响; 当未指定任何精度时,默认为 1。如果指定时只使用点而不带有一个显式值,则标识其后跟随一个 0。 |
.* | 点+星号 | 精度在 format 字符串中规定位置未指定,使用点+星号标识附加参数,指示下一个参数是精度 |
目录
length(类型长度) | 描述 |
---|---|
h | 参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X) [3] |
l | 参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串) |
转义序列在字符串中会被自动转换为相应的特殊字符。printf() 使用的常见转义字符如下: [2]
转义序列 | 描述 | ASCII 编码 |
---|---|---|
\' | 单引号 | 0x27 |
\" | 双引号 | 0x22 |
\? | 问号 | 0x3f |
\\ | 反斜杠 | 0x5c |
\a | 铃声(提醒) | 0x07 |
\b | 退格 | 0x08 |
\f | 换页 | 0x0c |
\n | 换行 | 0x0a |
\r | 回车 | 0x0d |
\t | 水平制表符 | 0x09 |
\v | 垂直制表符 | 0x0b |
参考链接:printf_百度百科
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。