今天在实现C++关于结构体方面的代码时候,定义了一个维度是3的结构体数据,简单在程序里面初始化后想着输出能够好看一点,便用\t进行对齐,发现第三个数据竟然没对齐,所以自己研究了一下背后的原因,先看一下我的具体代码。
#include <iostream>
using namespace std;
struct CandyBar
{
string brand;
float weight;
int calorie;
};
int main(void)
{
CandyBar snack[3] = {
"Mocha Munch",2.3,250,
"Fruit Salad",5.2,200,
"hamburger",2.6,1000
};
cout << "Brand:" << snack[0].brand << "\tweight:"
<< snack[0].weight << "\tcalorie:" << snack[0].calorie << endl;
cout << "Brand:" << snack[1].brand << "\tweight:"
<< snack[1].weight << "\tcalorie:" << snack[1].calorie << endl;
cout << "Brand:" << snack[2].brand << "\tweight:"
<< snack[2].weight << "\tcalorie:" << snack[2].calorie << endl;
return 0;
}
我期待的结果如下:
但是实际的结果如下:
经过研究发现,\t对齐原理是构建8的倍数,即前面字符的个数如果是8的倍数,就直接在后面添加8个空格,比如前面字符个数是8,则加上8个空格,前面字符个数是16,也是加8个空格。如果前面字符个数不是8的倍数就添加一定数量的空格使得总个数是8的倍数,比如前面字符个数是7就加1个空格,是20就加4个空格,是25就加7个空格,所以自己写代码的时候最好输入等长的字符串,以免出现对不齐的问题。
下图是一个演示,第一行我使用了\t,第二行我为了容易算,所以将\t的作用用7个数字代替,可以算出前面字符个数是17,所以如果用\t会补7个空格,最后一行我加了#将前面的字符凑齐到16个,后面用8个数字代替\t的作用,可以看出使用\t的话后面会补齐八个空格。
大家可以自己试一下,如果我哪里说得不对希望大家指正,互相交流才能更快进步!