C语言 之 格式化输出

前两天上课的时候,老师让输出个九九乘法表。

但是实际输出会觉得怪怪的,没对齐,尝试下对齐吧。

这样也不是不行是吧,哈哈。

1
2
3
4
5
6
7
8
9
printf("1x1=1");
printf("2x1=2 2x2= 4");
printf("3x1=3 3x2= 6 3x3= 9");
printf("4x1=4 4x2= 8 4x3=12 4x4=16");
printf("5x1=5 5x2=10 5x3=15 5x4=20 5x5=25");
printf("6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36");
printf("7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49");
printf("8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64");
printf("9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81");

没对齐的版本

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i <= 9; i++) {
for(j = 1; j <= i; j++) {
printf("%dx%d=%d ", i, j, i*j);
}
printf("\n");
}
return 0;
}

对占位符格式化输出

就用乘法表作为例子,

输出的是 Int(%d),

需要对一位数的结果进行扩展,让它能够对齐下面的两位数数字

格式化输出格式:% (-/0) [位宽 n] . [精度 m] d

格式中我增加了空格,方便阅读,实际代码中不能有空格哦

解释一下:

位宽 n:输出的内容占命令行的 n 个字符宽度,比如:[4](n=1),[ 4](n=2)

精度m:小数点后保留几位(貌似默认是 6 好像),比如 printf("%.2f", 3.1415); 输出的是3.14

-/0:这一部分是对自定义格式的一个补充。

  • ‘-‘:靠左输出(方括号并非输出内容,只是方便看到空格哈)

    • printf("%-2d, 1"); 输出的是:[1 ]
    • printf("%2d, 1"); 输出的是:[ 1]
  • ‘0’:左侧补0⃣️

    • printf("%02d, 1"); 输出的是:01
  • -/0 只能用一个,其中(靠左输出’-‘)的优先级更高,所以 printf("%-02d", 1); 输出的是 [1 ]

%d 就没有必要设置精度了哈,三个格式化可以独立使用,但是要设置精度的话记得加上 Dot(.) 哦!

比如:

  • %-2d
  • %05d
  • %.3f
  • %-5.2f

可以在电脑上试试看这些的输出,更好地理解下。

改进后的版本

  1. 靠右对齐:
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i <= 9; i++) {
for(j = 1; j <= i; j++) {
printf("%dx%d=%2d ", i, j, i*j);
}
printf("\n");
}
return 0;
}

输出结果

1x1= 1
2x1= 2 2x2= 4
3x1= 3 3x2= 6 3x3= 9
4x1= 4 4x2= 8 4x3=12 4x4=16
5x1= 5 5x2=10 5x3=15 5x4=20 5x5=25
6x1= 6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1= 7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1= 8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1= 9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

  1. 补零版本:
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i <= 9; i++) {
for(j = 1; j <= i; j++) {
printf("%dx%d=%02d ", i, j, i*j);
}
printf("\n");
}
return 0;
}

输出结果

1x1=01
2x1=02 2x2=04
3x1=03 3x2=06 3x3=09
4x1=04 4x2=08 4x3=12 4x4=16
5x1=05 5x2=10 5x3=15 5x4=20 5x5=25
6x1=06 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=07 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=08 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=09 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

  1. 靠左对齐:
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
int i,j;
for(i = 1; i <= 9; i++) {
for(j = 1; j <= i; j++) {
printf("%dx%d=%-2d ", i, j, i*j);
}
printf("\n");
}
return 0;
}

输出结果

1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81

作者

LiYanan

发布于

2022-10-08

更新于

2022-10-12

许可协议

评论