Printf函数详解
printf的解释:
printf是一个变参函数
printf的第一个参数是字符串
printf的第一个参数是需要输出的内容
printf的第二及后续参数将依次替换占位符
占位符的类型和数量需要与后续参数一一对应
printf打印函数的方式有:
printf('%d %f %c',整数型,浮点型,字符型);
实例:
#include<stdio.h>
int main()
{
int a = 123;
float b = 2.12;
char c = 'as';
printf("整形a为%d 浮点b为%f 字符为%c 字符显示为%c", a, b, c, c);
return 0;
}
在print中占位符也是需要通过声明类型进行占位符的切换。
对于无符号整形占位符(无符号,指的是无负数符号额度整形)
当然,对于无符号的整形,占位符也需要从**%d替换为%u**
之前所说的占位符也就是%d其实说法不够准确
正常来将应该称为转换规范
就是以**%号**开始的转换方式
![请添加图片描述](https://img-blog.csdnimg.cn/direct/5c3e5a9891154643b0c816c0e041db82.jpeg
在printf中使用站位符%u可以将数值提升为整数的int类型
占位符C,替换之后可以发现,下方的输出都替换为ASCII表格中的字符
占位符S,将后续的字符串完整打印下来,不走任何的转换流程
占位符o,x,X,
o将文字转换为8进制打印在控制台
x将无符号整形转换为16进制打印在控制台
X将无符号整形转换为16进制打印在控制台(大写X与小写x区别为16进制打印出来的区分大小写)
占位符f,e,E,都是浮点类型的计数方式,默认float在打印的时候会转换为double
e的输出为e计数发(大写和小写的区别也是将计数法中的e进行区分)
例如:
#include<stdio.h>
int main()
{
int a = 3.1415926;
printf("x:%e\n X:%E\n o:%o\f ", a, a, a);
return 0;
}
输出为:
x:1.482197e-323
X:1.482197E-323
o:3
D:\user\Desktop\C\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (进程 16300)已退出,代码为 0。
长度指示符:
查看长度指示表进行应用
例如:
#include<stdio.h>
int main()
{
long a= 314159267123;
long long b= 314159268123123;
printf("x:%d\n X:%lld\n ", a, b);
return 0;
}
可以在%d之前添加,ll也就是%lld进行输出,输出结果为:
-----------------------------------------------
x:626654515
X:314159268123123
D:\user\Desktop\C\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (进程 7844)已退出,代码为 0。
按任意键关闭此窗口. . .
-----------------------------------------------
若不加ll的输出结果为:
x:626654515
X:-409710093
D:\user\Desktop\C\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (进程 12100)已退出,代码为 0。
按任意键关闭此窗口. . .
同理,也可以用站位符X(16进制)通过增加ll实现字符的长度显示
例如:
#include<stdio.h>
int main()
{
long a= 0xFFFFFFFFFFFFFFFF;
long long b= 0xFFFFFFFFFFFFFFFF;
printf("x:%x\nX:%llX\n", a, b);
return 0;
}
在同样长度的16进制符号打印中明显可以看到%llX的打印会比%x打印出来的字节多很多
--------------------------------------------
x:ffffffff
X:FFFFFFFFFFFFFFFF
D:\user\Desktop\C\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (进程 22316)已退出,代码为 0。
按任意键关闭此窗口. . .
当然,占位符的字节既然可以增加那必然可以缩短
使用hh就可以将占位符的字节数量进行缩短处理
实例:
#include<stdio.h>
int main()
{
long a = 0xFFFFFFFFFFFFFFFF;
long long b = 0xFFFFFFFFFFFFFFFF;
printf("正常显示x:%x\n缩短显示X:%hX\n缩短缩短!X:%hhX\n", a, b, a);
return 0;
}
输出:
----------------------------------
正常显示x:ffffffff
缩短显示X:FFFF
缩短缩短!X:FF
D:\user\Desktop\C\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (进程 23152)已退出,代码为 0。
按任意键关闭此窗口. . .
-------------------------------------------
由上述得出
单个h组成的%hx,将16进制的int类转换为short类型输出
两个h组成的%hhx,将16进制的int类转换为char类型输出
精度。。
可以在ll之前添加.4组成%.4lld作为一个占位字节数量。
实例:
#include<stdio.h>
int main()
{
long a = 123;
long long b = 1234567;
float c = 3.14353;
printf("精度为7a:%.7d\n精度为7b:%.7d\n精度为3f:%.7f\n精度为3f:%.3f\n", a, b, c, c);
return 0;
}
输出:
------------------------------------------
精度为7a:0000123
精度为7b:1234567
精度为3f:3.1435299
精度为3f:3.144
D:\user\Desktop\C\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (进程 18824)已退出,代码为 0。
按任意键关闭此窗口. . .
-----------------------------------------------
由以上结论得出:
组成%.7d的整数就会自动只显示7为数字字符,若变量数字不足7位,就将前几位自动添加数字0
组成%.7f的浮点类数就会自动只显示小数点后7为数字字符,若变量数字不足7位,就将后几位直接不显示。
十进制表示的最小字节宽度
可以在d之前添加4组成%4lld作为一个占位字节数量。
表述输出值的所有位数的个数
实例:
#include<stdio.h>
int main()
{
long a = 123;
long long b = 1234567;
float c = 3.1415926;
printf("精度为7a:%7d\n精度为7b:%7d\n精度为3b:%3d\n精度为7f:%7f\n精度为3f:%3f\n", a, b, b, c, c);
return 0;
}
输出:
--------------------------------------------
精度为7a: 123
精度为7b:1234567
精度为3b:1234567
精度为7f:3.141593
精度为3f:3.141593
D:\user\Desktop\C\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (进程 18300)已退出,代码为 0。
按任意键关闭此窗口. . .
--------------------------------------------
结论:
--------------------------------------------
这是十进制表述的最小宽度,只要满足这个条件,对输出不会有影响,但是若不满足这个条件就会像:
精度为7a: 123
使用空格自动补齐之前缺少的位数
在浮点数中的话将小数点也会算作一位
--------------------------------------------
字符标志:
实例:
#include<stdio.h>
int main()
{
int a = 1234;
//默认与最小宽度那个符号类似,只不过将空格换成了00000
printf("在站位符号前添加0为:%07d\n", a);
//正常情况下数字都是左对其,加上-号之后就 开始右对齐了。
printf("在站位符号前添加-为: %-7d\n", a);
//让内容产生符号,正数用+号,负数用-号。
printf("在站位符号前添加+为: %+7d\n", a);
//分辨八进制
printf("在站位符号前添加#为(八进制): %07o\n", a);
//分辨十六进制
printf("在站位符号前添加#为(十六进制): %07x\n", a);
printf("在站位符号前添加#为(十六进制): %07X\n", a);
return 0;
}
输出:
-----------------------------------------------
在站位符号前添加0为:0001234
在站位符号前添加-为: 1234
在站位符号前添加+为: +1234
在站位符号前添加#为(八进制): 0002322
在站位符号前添加#为(十六进制): 00004d2
在站位符号前添加#为(十六进制): 00004D2
D:\user\Desktop\C\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe (进程 4100)已退出,代码为 0。
按任意键关闭此窗口. . .
-----------------------------------------------