C零基础课程-06-printf进阶

格式化控制的完整语法

%[格式标志][宽度][.精度]输出类型
  • 输出类型:之前课程中介绍过的d,c,f,X,u等
  • 宽度:输出内容所占的最小宽度
  • 格式标志:与对齐方式、补位方式、是否输出正负符号、是否输出特殊进制的前缀有关,可以同时设置多个标志

最小占用宽度

可以通过数字,指定输出内容的所占的最小宽度。

#include <stdio.h>


int main(int argc, char* argv[])
{
 printf("%8d"/*数字表示占有的最小宽度*/, 15);
 return 0;
}

精度

小数点后接数字,代表了输出精度,对于不同的输出类型,精度的意义不一样。
对于十进制、十六进制,精度代表输出的最少数字位数。
对于浮点数,精度代表小数部分的位数。

#include <stdio.h>


int main(int argc, char* argv[])
{
 printf("%.3d", 15);
 return 0;
}

小数控制精度:

#include <stdio.h>

int main(int argc, char* argv[])
{
 printf("%.8f", 3.1415926);
 return 0;
}

格式标志

左对齐

“-”代表左对齐,默认是右对齐

#include <stdio.h>

int main(int argc, char* argv[])
{
 printf("%-8d", 15);
 return 0;
}

输出符号

“+”代表会输出符号(无论正负),默认只有负数才输出符号

#include <stdio.h>

int main(int argc, char* argv[])
{
 printf("%+d", 15);
 return 0;
}

补位

“0”代表如果输出位数不足,则会补0填充

#include <stdio.h>

int main(int argc, char* argv[])
{
 printf("%08X", 15);
 return 0;
}

显示进制前缀

“#”表示对于十六进制、八进制的输出,显示进制前缀。十六进制的前缀是"0X",八进制的前缀是"0"。

#include <stdio.h>

int main(int argc, char* argv[])
{
 printf("%#X, %#o", 15, 07);
 return 0;
}

常见的转义字符

回车与换行

回车换行的区分,来源于打字机。

严格地说,回车只代表将光标移动到行首,并不会另起一行。
不过这都是历史话题了,我们只要知道历史遗留下来的习惯导致,在不同的操作系统中,使用的换行方式是不同的,具体而言:

  • Windows下习惯使用\r\n作为换行
  • Linux与Unix下习惯使用\n作为换行
  • Mac上习惯使用\r作为换行
    只回车不换行导致字符被覆盖的例子:
#include <stdio.h>

int main(int argc, char* argv[])
{
 printf("abc\rdef");
 return 0;
}

制表符

\t代表制表符。
制表符对应着我们键盘 键的效果(大小写锁定键上面),在输出时可用于对齐。

#include <stdio.h>

int main(int argc, char* argv[])
{
 printf("姓名\t学号\t生日\r\n");
 return 0;
}

猜你喜欢

转载自www.cnblogs.com/shellmad/p/11646147.html