我\t用来分隔我的输出,但它产生不一致的空格.
例如,以下代码生成
#include <iostream>
int main()
{
std::cout << "Terms\tResults\tet(%)\tea(%)\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Terms Results et(%) ea(%)
注意空间的差异
为什么会这样?
标签结束每个第8列.
v v v v v
1234567812345678123456781234567812345678
Terms Results et(%) ea(%)
Run Code Online (Sandbox Code Playgroud)
“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 ...字段溢出了一个选项卡位置。
理想情况下,我们应该根据表中列的宽度要求移动制表位。但移动制表符站是相当不可移植的。因此,在计算机程序的输出中使用制表符进行垂直对齐基本上不太可行;使用空格可以更好地实现列格式。良好的格式化功能可以提供任意字段宽度,在字段内进行左对齐、居中对齐或右对齐。