我有两个函数,一个会输出像是Starting initialization...
这样的信息,另一个会检查返回码并输出"Ok"
、"Warning"
或"Error"
。但是产生的输出长度不同:
Starting initialization...Ok.
Checking init scripts...Ok.
我该如何获得以下类似的东西?
Starting initialization... Ok.
Checking init scripts... Ok.
我有两个函数,一个会输出像是Starting initialization...
这样的信息,另一个会检查返回码并输出"Ok"
、"Warning"
或"Error"
。但是产生的输出长度不同:
Starting initialization...Ok.
Checking init scripts...Ok.
我该如何获得以下类似的东西?
Starting initialization... Ok.
Checking init scripts... Ok.
您可以在字符串字段上指定宽度,例如:
printf("%-20s", "initialization...");
然后使用该字段打印的任何内容都将被填充为空白,直到达到指定的宽度。
-
左对齐该字段中的文本。
此外,如果您希望灵活选择 width
,可以在以下两种格式中选择其中之一(带截断或不带截断):
int width = 30;
// No truncation uses %-*s
printf( "%-*s %s\n", width, "Starting initialization...", "Ok." );
// Output is "Starting initialization... Ok."
// Truncated to the specified width uses %-.*s
printf( "%-.*s %s\n", width, "Starting initialization...", "Ok." );
// Output is "Starting initialization... Ok."
printf
允许使用宽度说明符格式化输出。例如:
printf( "%-30s %s\n", "Starting initialization...", "Ok." );
使用负的宽度说明符来指示左对齐,因为默认情况下会使用右对齐。
另外还有一个%n
修饰符,它可以在特定情况下帮助。它返回字符串已经输出的列数。例如:您想要编写几行文本,这些文本在第一行的宽度内就像一个表格一样。
int width1, width2;
int values[6][2];
printf("|%s%n|%s%n|\n", header1, &width1, header2, &width2);
for(i=0; i<6; i++)
printf("|%*d|%*d|\n", width1, values[i][0], width2, values[i][1]);
将打印两列,这两列的宽度都与字符串header1
和header2
的长度相同。我不确定所有实现都有%n
,但Solaris和Linux都有。
还有一种相对低技术的解决方案,即通过手动计算添加空格来使您的消息排列整齐。您可以在消息字符串中包含一些尾随空格。
从使用制表符开始 - 使用\t字符修改器。它将前进到固定位置(列,终端术语)。
然而,如果超过列宽(如果我没记错,是4个字符),它就无法帮助了。
为了解决这个问题,使用固定数量的制表符(5?6?试试)编写您的“OK/NOK”内容。然后返回(\r)而不是换行,并编写您的消息。