printf与C中的制表符对齐

Posted

技术标签:

【中文标题】printf与C中的制表符对齐【英文标题】:printf alignment with tabs in C 【发布时间】:2021-12-26 05:57:15 【问题描述】:

我的代码中有以下打印内容

printf("%-*s %s", 20, "string1", "string2");
printf("%-*s %s", 20, "\tstring3", "string4");

我希望它打印以下内容:

string1              string2
    string3          string4

但在某些操作系统(例如 Ubuntu 16)上,我得到以下内容

string1              string2
    string3              string4

我到处搜索,但找不到解决方法,我认为 %-*s 应该解决了我的对齐问题,但它没有

【问题讨论】:

请提供完整的代码minimal reproducible example。 此代码在一行上打印四个字符串。目前尚不清楚为什么您期望有两行输出。 我建议不要使用制表符来格式化输出。 制表符通常比处理带有空格的输出需要更多的工作,并且制表符宽度不是保证的事情。与列中的其他项目相比,超过制表符宽度的一个输出将导致您的列在发生这种情况的每一行上不对齐。另一方面,空格只是阻止记帐任务,但在每个终端上都是一致的。 【参考方案1】:

TAB 仍然是 1 个字符。它打印为 1 个字符。然后由终端来做它想做的任何事情。

这意味着,printf("%-20s", "\tstring3"); 将打印 1 个 TAB 字符,7 个普通字符,然后 12 个空格到达 20。

你需要重新考虑你想做什么。一种方法是创建一个函数,该函数接收带有 TAB 的字符串,并返回一个字符串,其中这些字符串已扩展为空格。如果 TAB 始终位于字符串的开头,那么您可以将 TAB 替换为 8 个(或您需要的任意多个)空格。如果您需要实际的 TAB 停止,则需要更多的逻辑来将它们扩展为适当数量的空格。

【讨论】:

以上是关于printf与C中的制表符对齐的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何对齐输出

C-52 文本对齐的方法

printf()函数中 ,水平制表符,空格的个数

WORD文档里面的制表符怎样用

WORD中的制表符怎么做?

c 01