c - printf 与 C 中的制表符对齐

标签 c printf

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

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

我希望它打印以下内容:

string1              string2
    string3          string4

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

string1              string2
    string3              string4

我到处搜索,找不到解决这个问题的方法,我认为 %-*s 应该已经解决了我的对齐问题,但事实并非如此

最佳答案

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

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

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

关于c - printf 与 C 中的制表符对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69967417/

相关文章:

c - SSE2:将二维数组中的有符号整数与 double 相乘并在 C 中对结果求和

c++ - 将带有 C header 的文件夹转换为带有 C++ header 的文件夹的最简单方法是什么?

c++ - 向窗口应用程序发送 WM_CHANGEUISTATE 后,当使用鼠标访问菜单时,助记符不会显示在系统菜单上

java - 使打印文本正确对齐

c - Sprintf 连接字符串

将matlab m文件转换为c文件

c - 如何使用scanf读取一个值并将其存储在C中动态分配的变量中?

c - 在 printf 中参数化格式说明符

c - 打印字符数组的前几个字符?

c - 使用 Mac 终端实用程序时 printf 不返回任何内容