我有多个输出,我需要并排打印。有没有办法用C实现这个目标?类似于ls -a的输出 即我想打印第一列数据,然后打印第二列等等
答案 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");
}