我有两个函数,一个产生消息,如 Starting initialization ... ,另一个用于检查返回代码并输出" Ok" "警告“”错误“。但是,生成的输出具有不同的长度:

Starting initialization...Ok.
Checking init scripts...Ok.

我怎样才能得到这样的东西:

Starting initialization...       Ok.
Checking init scripts...         Ok.
有帮助吗?

解决方案

您可以在字符串字段上指定宽度,例如

printf("%-20s", "initialization...");

然后用该字段打印的任何内容都将填空到您指定的宽度。

- 左对齐该字段中的文字。

其他提示

printf 允许使用宽度说明符进行格式化。 e.g。


printf( "%-30s %s\n", "Starting initialization...", "Ok." );

您可以使用负宽度说明符来指示左对齐,因为默认值是使用右对齐。

此外,如果您希望灵活选择 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."

还有%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]);

将打印2个相同宽度的列,两个字符串 header1 header2 可能具有的长度。 我不知道所有实现是否都有%n ,但Solaris和Linux都有。

还有一种相当低技术的解决方案,即手动添加空间以使您的消息排成一行。没有什么能阻止你在消息字符串中包含一些尾随空格。

首先使用Tabs, \ t 字符修饰符。它将前进到固定位置(列,终端术语)。 但是,如果存在大于列宽的差异(4个字符,如果我没记错的话),则无效。

要解决这个问题,请写下“OK / NOK”。使用固定数量的Tabs(5?6 ?,试试),然后返回( \ r )没有新内容的东西,并写下你的消息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top