制表符(\ t)有多少个空格?

Cha*_*ang 18 c c++ printf

我想实现文本绘图功能.但我不确定\t它是如何工作的,这意味着我不知道应该打印多少个空格\t.

我想出了以下算法:

a)每个\t代表最多NUMBER_OF_SPACES_FOR_TAB空间.b)如果\t出现在相应位置的最后一行,则\t该行应与\t最后一行对齐.

例:

printf("a\t\tb\n");
printf("\t\tc\n");
Run Code Online (Sandbox Code Playgroud)

应打印:

a11112222b
34444c
Run Code Online (Sandbox Code Playgroud)

哪里:

1.Number i表示\t位置的空格i

2.NUMBER_OF_SPACES_FOR_TAB == 4

有谁知道标准算法?提前致谢.

Mar*_*som 26

制表符应前进到下一个制表位.历史上,制表位是每8个字符,虽然现在常用较小的值,但可以配置大多数编辑器.

我希望你的输出看起来如下:

123456789
a       b
        c
Run Code Online (Sandbox Code Playgroud)

算法是将列计数开始为零,然后为每个字符输出递增.当您到达选项卡时,输出n-(c%n)空格,其中c是列号(基于零)并且n是制表符间距.

编辑:我原来的公式错了一年多了,没有人打电话给我.抱歉.现在已经修好了.

  • @ H2CO3:Torvalds先生的理由是如果您阅读他经常在互联网上发布的任何内容而引起争议......无论如何,_anyone_推荐标签空间并不太了解哪些标签.标签不是空格.一个选项卡按_one level_缩进,不是1个空格,也不是2,也不是4,也不是8,也不是任何其他数字.常见的借口从"但它看起来像这样"通过"我们总是这样做"到"我必须使用的一些人使用无法做标签的编辑",但没有任何借口是真正有效的. (7认同)
  • 或者,措辞不同,声称标签是8个空格就像声称å与a,或破折号,连字符和减号是相同的东西,И是俄语N,Я是俄语R. (3认同)
  • 通常是今天使用的4个空格.对于具有多个级别的语言,2并不罕见. (2认同)
  • @Damon:哦,感谢上帝。有人理智。我现在遇到的大多数人都发誓说制表符缩进是邪恶的。他们永远无法很好地解释原因。它开始让我发疯! (2认同)
  • @MarkRansom 标签并不含糊。它们具有意义。一个制表符 = 一级缩进。我想要“显示”缩进级别的宽度是我的选择。我不想被极具影响力的代码开发人员强迫以 8 的缩进宽度查看我的代码。如果该代码使用制表符正确格式化,我可以以 3 的缩进宽度查看它,而 Torvalds 先生可以查看与八个相同的代码。我的编辑器,我选择它的显示方式。当某人或某些工具认为他们可以用八个空格替换制表符时,问题就开始了。这不是选项卡的含义。 (2认同)
  • @MarkRansom 不,没有。如果制表符仅用于其设计目的,则不存在这样的地方:缩进仍然是缩进,并且需要使用空格而不是制表符进行对齐。实际上,我在所有可以选择的地方都使用制表符缩进,并且可以使用*任何*制表符设置正确查看我生成的代码。实现此目的的唯一关键是仅使用制表符进行缩进,仅使用空格进行对齐。这两个字符具有不同的含义,因此需要这样使用。 (2认同)
  • @MarkRansom 嗯,我已经编程 25 年了,总是用制表符缩进。不,我从不使用制表符进行对齐。有些编辑器会做出如此脑残的事情,而这些事情是由那些从未考虑过制表符和空格之间的区别的人编写的。但即使是那些编辑也可以被教导不要做这种令人讨厌的事情。我的意思是,事情没那么复杂。我们正在用更加复杂的语言编写更加复杂的东西。你不能告诉我我们无法正确使用制表符和空格...... (2认同)

Joh*_*ica 14

想象一下每8个空格有一个制表位的标尺.制表符将文本与下一个制表位对齐.

                                0       8       16      24      32      40
                                |.......|.......|.......|.......|.......|
printf("\tbar\n");              \t      bar
printf("foo\tbar\n");           foo\t   bar
printf("longerfoo\tbar");       longerfoo\t     bar
Run Code Online (Sandbox Code Playgroud)

要计算下一个制表位的位置,请选择当前的制表位column.

nextTabStop = (column + 8) / 8 * 8
Run Code Online (Sandbox Code Playgroud)

/ 8 * 8部分有效地将结果截断为最接近的8的倍数.例如,如果您在第11列,则(11 + 8)为19,19/8为2,而2*8为16.所以下一个选项卡第11列的停止位于第16列.

在文本编辑器中,您可以将制表位配置为较小的间隔,例如每4个空格.如果您正在模拟终端上的标签,您应该在每个标签上留出8个空格.

  • `column` 是一个你需要跟踪自己的假设变量。标准库不知道光标的当前列位置,不知道。 (2认同)

Why*_*ing 5

制表符转换到下一个制表位.默认情况下,每8个空格一个.但在大多数shell中,您可以轻松地将其编辑为您想要的任意数量的空间(Linux中的配置文件首选项,在vim中设置tabstop).