代码之家  ›  专栏  ›  技术社区  ›  CroCo

选项卡“\t”的间距不一致

  •  1
  • CroCo  · 技术社区  · 9 年前

    我正在使用 \t 以分隔输出,但会产生不一致的空格。

    例如,以下代码生成

    #include <iostream>
    
    int main()
    {
        std::cout << "Terms\tResults\tet(%)\tea(%)\n";
        return 0;
    }
    

    Terms Results et(%) ea(%)

    注意空间上的差异

    为什么会这样?

    2 回复  |  直到 9 年前
        1
  •  6
  •   Qwertiy    9 年前

    每个第8列以制表符结尾。

    v       v       v       v       v
    1234567812345678123456781234567812345678
    Terms   Results et(%)   ea(%)
    
        2
  •  4
  •   Kaz    9 年前

    单词“tab”是“table”或“tablate”的前缀。制表符的用途是生成垂直对齐,例如将文本排列到表列中,或为每个段落实现一致的前导缩进。制表符的目的不是生成相等的水平间距。选项卡生成的空间大小取决于它离下一个选项卡站点的距离。这就是为什么你看到 “空间差异” .

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

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

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

    试试这个:

    std::cout << "Terms\tResults\tet(%)\tea(%)\n";
    std<<cout << "a\tb\t\tc\n"
    

    您应该看到表格对齐:

    Terms   Results et(%)   ea(%)
    a       b               c
    

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

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