问题发现
在用C语言编译通讯录的过程中,有个目的是打印一串左对齐的printf语句【图1】【图2】,但是在这个语句中printf中,表示左对齐的%-md的和水平制表符\t是合在一起使用,这不禁让我产生疑问,这里的水平制表符的作用是什么?
![](https://img-blog.csdnimg.cn/img_convert/a18d157f28d28d541e3c1b1727fb7df4.png)
图1
![](https://img-blog.csdnimg.cn/img_convert/8eb70a22b169b58996f31a4252e49dfc.png)
图2
左对齐符号%-md
对齐方式是数字加上空格一共占用m个位置,并往左对齐【图3】
![](https://img-blog.csdnimg.cn/img_convert/152813dc695e6e100a7334d832eab9b4.png)
图3
![](https://img-blog.csdnimg.cn/img_convert/dbe512681285dd7476beeb9e73ee579f.png)
假如这个数字所占位数y>左对齐符号指示的所占空格m,则这个数字向右顶格写,并不会出现截断的情况【图4】。
![](https://img-blog.csdnimg.cn/img_convert/96c8cb37f3fb6092a7434f8eecdc45b1.png)
图4
![](https://img-blog.csdnimg.cn/img_convert/23c732d3ed72641b9e91ba2cbc4a52f3.png)
水平制表符\t
水平制表符的作用是让所有数字跟在水平制表符所相应的格数x(x是离上一个数字所占位数y(除0以外)最近的8的倍数:y1=4,x1=8;y2=9,x2=16)后面输出【图5,图6】
图5中的与n位数y1最相近的8的倍数x1是8
![](https://img-blog.csdnimg.cn/img_convert/7e1b5d2b05792e5067b8385f2b8aa56b.png)
图5
![](https://img-blog.csdnimg.cn/img_convert/22b7fa5df0261044593b186484c8ec11.png)
![](https://img-blog.csdnimg.cn/img_convert/de210b7c4598afcb9fe3c0be99b4de0e.png)
图6
![](https://img-blog.csdnimg.cn/img_convert/b1f6729f7312fc0c5d5d75f29cf34ac0.png)
两个符号共同使用
一般情况下,左对齐可以满足大部分情况,但是当数字所占位数y>左对齐符号指示的所占空格m时,数字会顶格表达,这样就会破坏整个表格的整齐性【图7】,这时候,就需要水平制表符\t来起作用,即让所有对有的数字在对应的水平制表数x后来显示的话,在上下数字位数差不多的情况下,就不会出现上下无法对齐的情况了,且每个数字所占的位数是一样的(都是x)【图8】。
![](https://img-blog.csdnimg.cn/img_convert/ae2e8e1c5f02d5c2c7c5c6a768804357.png)
图7
![](https://img-blog.csdnimg.cn/img_convert/38ff1d2ffc5cb51c1afd473ecbd916b0.png)
图8