#以下参考《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————