标签'\ t'的间距不一致

Cro*_*oCo 0 c++ format

\t用来分隔我的输出,但它产生不一致的空格.

例如,以下代码生成

#include <iostream>

int main()
{
    std::cout << "Terms\tResults\tet(%)\tea(%)\n";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Terms Results et(%) ea(%)

注意空间的差异

为什么会这样?

Qwe*_*tiy 6

标签结束每个第8列.

v       v       v       v       v
1234567812345678123456781234567812345678
Terms   Results et(%)   ea(%)
Run Code Online (Sandbox Code Playgroud)


Kaz*_*Kaz 5

“tab”一词是“table”或“tabulate”的前缀。制表符的目的是生成垂直对齐,例如将文本排列到表格列中,或者为每个段落实现一致的前导缩进。制表符的目的不是生成相等的水平间距。制表符生成多少空间取决于它与下一个制表位的距离。这就是为什么你会看到“空间差异”

制表符及其在终端设备上的解释源自打字机上的 Tab 键。打字机上的 Tab 键会触发滑架的运动,滑架会停在下一个制表位处。打字员可以通过移动机械滑块来配置打字机制表位。

在字符显示设备上,ASCII TAB 字符的工作方式类似:它前进到下一个制表符位置。制表位通常每八个字符一次。(在某些终端上,它们可以通过固件中的菜单进行配置,甚至可以通过主机可以生成的转义序列进行配置)。

现代文字处理程序仍然模仿打字机制表位滑块作为楔形元素,可以添加到“标尺”并四处移动。

尝试这个:

std::cout << "Terms\tResults\tet(%)\tea(%)\n";
std<<cout << "a\tb\t\tc\n"
Run Code Online (Sandbox Code Playgroud)

您应该看到表格对齐方式:

Terms   Results et(%)   ea(%)
a       b               c
Run Code Online (Sandbox Code Playgroud)

请注意,我们必须在之后使用两个选项卡b,因为该Results et ...字段溢出了一个选项卡位置。

理想情况下,我们应该根据表中列的宽度要求移动制表位。但移动制表符站是相当不可移植的。因此,在计算机程序的输出中使用制表符进行垂直对齐基本上不太可行;使用空格可以更好地实现列格式。良好的格式化功能可以提供任意字段宽度,在字段内进行左对齐、居中对齐或右对齐。