栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

printf输出全格式(C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

printf输出全格式(C语言)

在学尚硅谷C语言视频时,想自己先把他说的项目写一遍在去看他的视频,突然发现我对printf输出就只会%d,%f之类的,所以就在这里总结一下。

特殊符号输出:

据我统计,正常的可视ASCII(码值为32-126之间)的字符,据我测试的就这些不能只有下面四个不能直接输出,其它均可通过键盘输入用printf函数直接打印出来。

""
%%%
''
\

代码:

#include 

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 *输出类型为字符串。输出字符串中的字符直至遇到字符串中的空字符(字符串以 '‘ 结尾,这个 '' 即空字符)或者已打印了由精度指定的字符数
pvoid *以16进制形式输出指针
%不转换参数不进行转换,输出字符‘%’(百分号)本身
nint *到此字符之前为止,一共输出的字符个数,不输出文本(我用Windows下的qt,vs code,都无法使用,但在老版Linux系统下可以使用,但是需要另一个变量去接收,见下图)

 ​

 其它的测试代码:

#include 

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 %dn"
           "%on"
           "%un"
           "%x %Xn"
           "%f %lf %f %lfn"
           "%en"
           "%g %Gn"
           "%cn"
           "%sn"
           "%pn"
           "%%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%dn",i);

    return 0;
}

现象:

​

(width)最小宽度:

width(最小宽度)

字符名称

描述

digit(n)

数字

字段宽度的最小值,如果输出的字段长度小于该数,结果会用前导空格填充;如果输出的字段长度大于该数,结果使用更宽的字段,不会截断输出

*

星号

宽度在 format 字符串中规定位置未指定,使用星号标识附加参数,指示下一个参数是width(使用形式:printf("%*dn", 7, intx2),需要在前面多加一个参数7)

代码:

#include 

int main()
{
    int intx1=999999,intx2=999;

    printf("---%5d---%5d---n",intx1,intx2);
    printf("%*dn", 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 

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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号