C语言printf详解

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。
按任意键关闭此窗口. . .
-----------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摚张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值