c语言——printf()的转换说明修饰符

#以下参考《C Primer Plus》#

//floats.c--一些浮点型的组合
#include <stdio.h>
int main()
{
	const double RENT = 3852.99;
	printf("*%f*\n", RENT);
	printf("*%e*\n", RENT);
	printf("*%4.2f*\n", RENT);
	printf("*%3.1f*\n", RENT);
	printf("*%10.3f*\n", RENT);
	printf("*%10.3E*\n", RENT);
	printf("*%+4.2f*\n", RENT);
	printf("*%+010.2f*\n", RENT);
	return 0;
}

这里用的是const限定符,限定一个变量为只读。结果有很多。结果和%m.nf是一样的,注意一下e和E的使用,还有此处的+的输出效果,与%d并不一样。

 结果如下:

*3852.990000*
*3.852990e+03*
*3852.99*
*3853.0*
*  3852.990*
* 3.853E+03*
*+3852.99*
*+003852.99*

对于d的情况

//width.c程序
#include <stdio.h>
#define PAGE 959
int main(void)
{
	
	printf("*%d*\n", PAGE);
	printf("*%2d*\n",PAGE);
	printf("*%10d*\n", PAGE);
	printf("*%+10d*\n", PAGE);
	printf("*%-10d*\n", PAGE);

	return 0;
}

 结果输出:

*959*
*959*
*       959*
*      +959*
*959       *

-为左对齐打印;

+:若为有符号值,会在正值前显示+;会在负值前显示 -,如下面的例子

//examples——"+"
#include <stdio.h>
#define PAGE -959
int main(void)
{
	printf("*%+10d*\n", PAGE);
	return 0;
}

 结果输出:

*      -959*

程序里是+,其实打印出来是“-”!

再尝试改变,先尝试在这个代码吧:

//flags.c——演示一些格式标记
#include <stdio.h>
int main()
{
	printf("%x %X %#x\n", 32, 32, 32);
	printf("*%d** %d**% d**\n", 42, 42, -42);
	printf("**%5d**%5.3d**%05d**%05.3d**\n", 6, 6, 6,6);
	return 0;
}

 结果输出:

20 20 0x20
*42** 42**-42**
**    6**  006**00006**  006**

%x为无符号十六进制整数。使用0f。%X也是无符号十六进制整数,使用0F,虽然我并不知道这里为什么呈现的是20;

%#x就很有意思了,%#的作用有很多,碰上%x和%X就是表示以0x和0X开始。除此以外,它可以让%o的形式以0开始输出【我没搞懂,所以就不举例子了,欢迎大家教我】;还可以保证浮点格式即使后面没有任何数字,也打印一个小数点符号;还可以让%g和%G(有效数字的最大位数)格式不删除0。如下:

//examples.c——#的用法
#include <stdio.h>
int main()
{
	printf("*%8.0f*\n*%#8.0f*\n",5.288 ,5.288 );

	printf("*%g*\n*%G*\n*%#g*\n", 5.288, 5.288, 5.288);

	return 0;
}
*       5*
*      5.*
*5.288*
*5.288*
*5.28800*

还有一点,标记0的使用

对于数值格式,用前导0代替空格填充字段宽度;

对于整数格式,如果出现-或者制定精度,则会忽略此标记。

//examples.c——0的用法
#include <stdio.h>
int main()
{
	printf("*%5d*\n*%5.3d*\n*%05d*\n*%-05d*\n*%05.3d*\n", 6, 6, 6, 6,6);
	return 0;
}

输出结果:尤其注意最后两个数

*    6*
*  006*
*00006*
*6    *
*  006*

还还还有一点!空格的使用

符号值为正,在值前面显示前导空格(不显示任何符号);

符号值为负,前面显示-,并覆盖空格。

例子如下:

//examples.c——空格的用法
#include <stdio.h>
int main()
{
	printf("*%d*\n* %d*\n*% d*\n", 42, 42, -42);
	return 0;
}

输出结果:

*42*
* 42*
*-42*

 What's more,字符串的输出也是一样的规则:

/stringf,c——字符串格式
#include <stdio.h>
#define BLURB "Authentic imitation!"
int main()
{
	printf("[%2s]\n",BLURB);
	printf("[%24s]\n", BLURB);
	printf("[%24.5s]\n", BLURB);
	printf("[%-24.5s]\n", BLURB);
	return 0;
}

结果输出:

[Authentic imitation!]
[    Authentic imitation!]
[                   Authe]
[Authe                   ]

注意,虽然是%2s,但可以扩容到打印所有字符,和之前学习的浮点数%m.nf一个道理;

精度限制了待打印的字符,如.5f是告诉printf()只打印5个字符;

-是使文本左对齐输出。

END————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值