printf输出全格式(C语言)

在学尚硅谷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/iint输出类型为有符号的十进制整数,i 是老式写法(现在均可使用)
o(小写)unsigned int输出类型为无符号八进制整数(没有前导 0)
uunsigned int

输出类型为无符号十进制整数

(单独的u不要加d)

x/Xunsigned int

输出类型为无符号十六进制的整数,x 对应的是 abcdef,X 对应的是 ABCDEF

(没有前导 0x 或者 0X)

f/lfdouble输出类型为十进制表示的浮点数,默认精度为6(lf 在 C99 开始加入标准,意思和 f 相同)
e/Edouble输出类型为科学计数法表示的数,此处 "e" 的大小写代表在输出时用的 “e” 的大小写,默认浮点数精度为6

g/G

double

根据数值不同自动选择 %f 或 %e/%E,%e /%E格式在指数小于-4或指数大于等于精度时用使用

(据我试验,当正数据超过7位数,负数据超过4位时才会是%e输出)

cchar输出类型为字符型。可以把输入的数字按照相应ASCII转换为对应的字符
schar *输出类型为字符串。输出字符串中的字符直至遇到字符串中的空字符(字符串以 '\0‘ 结尾,这个 '\0' 即空字符)或者已打印了由精度指定的字符数
pvoid *以16进制形式输出指针
%不转换参数不进行转换,输出字符‘%’(百分号)本身
nint *到此字符之前为止,一共输出的字符个数,不输出文本(我用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)最小宽度:

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) 标志:

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精度:

.precision(精度)

字符名称

描述

.digit(n)

点+数字

对于整数说明符(d、i、o、u、x、X):precision 指定了要打印的数字的最小位数。如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。精度为 0 意味着不写入任何字符;

对于 e、E 和 f 说明符:要在小数点后输出的小数位数;

对于 g 和 G 说明符:要输出的最大有效位数;

对于 s 说明符:要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符;

对于 c 说明符:没有任何影响;

当未指定任何精度时,默认为 1。如果指定时只使用点而不带有一个显式值,则标识其后跟随一个 0。

.*

点+星号

精度在 format 字符串中规定位置未指定,使用点+星号标识附加参数,指示下一个参数是精度

 (length)类型长度:

目录

特殊符号输出:

带%格式的输出 :

说明符:

(width)最小宽度:

(flags) 标志:

( .precision)精度:

 (length)类型长度:

转义序列


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_百度百科

 

  • 15
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值