使用c格式化输出

时间:2009-12-16 05:10:17

标签: c printf

我有多个输出,我需要并排打印。有没有办法用C实现这个目标?类似于ls -a的输出 即我想打印第一列数据,然后打印第二列等等

6 个答案:

答案 0 :(得分:6)

您可以使用格式字符串执行此操作。
有关详细信息,请参阅printf(3)联机帮助页。

答案 1 :(得分:5)

您需要指定字段宽度,this question有一个非常好的例子来说明您的需求。

答案 2 :(得分:3)

编辑(改变我的整个答案):

对于printf免费获得的格式(包括与长度有关的格式): http://www.cplusplus.com/reference/clibrary/cstdio/printf/

我会避免使用标签来执行此操作。标签可以在不同的机器上以不同的方式解释(2个空格,4个空格,n个空格)。如果这是一款适合您的机器上的有趣应用程序,请选择标签...但以下示例同样简单。

RIGHT JUSTIFY(8是宽度,s表示字符串,|只是显示间距):

printf("|%8s|%8s|","try","this");

会导致:

|     try|    this|

LEFT JUSTIFY( - 表示左对齐,8表示宽度,s表示字符串,>表示间距):

printf("%-8s%-8s>","try","this");

会导致:

try     this    >

答案 3 :(得分:2)

如果您的意思是自动计算列数及其宽度等,则不能仅使用printf()来执行此操作。但是,可以添加额外的代码来预先计算列的数量和宽度。例如,考虑OpenBSD code for ls

答案 4 :(得分:1)

让我确保理解;你有一些像

这样的代码
while (some_condition)
{
  bread();
  bwrite();
  pgsize();
}

并且您希望将这些函数的输出显示为

bread    bwrite    pgsize
1234     5678      1024
2345     6789      1024

这接近你的意思吗?

如果是这样,那么你有几个选择。首先,每个函数打印其输出,但没有换行符:

void bread()
{
  ...
  printf("%*.*d", field_width, precision, value);
  fflush(stdout)
  ...
}

其中field_width是列的最小宽度,precision表示要打印的最小位数,value是您正在打印的功能。转换说明符中的*允许您将宽度和精度作为参数传递给printf(),即

printf("%*.*f", 10, 2, 3.14159);

相同
printf("%10.2f", 3.14159);

在转换说明符中使用*标志的主要优点意味着您可以在运行时调整输出格式。请注意,转化说明符中的*表示scanf()中的完全不同

调用的最后一个函数或调用者需要将新行写入输出流。

或者,您可以让每个函数将其值返回给调用者,并让调用者执行所有输出:

while (some_condition)
{
  int r = bread();
  int w = bwrite();
  int s = pgsize();
  printf("%*.*d%*.*d%*.*d\n", rwidth, rprec, r, wwidth, wprec, w, swidth, sprec, s);
}

其中rwidth,rprec等都已声明并设置在其他位置。

答案 5 :(得分:0)

使用"\t""\n"

示例:

for(int i = 0 ; i < m ; ++i)
{
  for(int j = 0; j < n ; ++j
 {
    printf("%d\t", a[i][j]);
 }
 printf("\n");
}