C 如何在printf中填充两个字符串?
例如:C 如何在printf中填充两个字符串?,c,C,例如: printf("%-10s%s\n", s1, s2); 我可以得到: s1 s2 当前面的字符串可能具有不同的长度时,我希望s3位于固定列 printf("%s%s%s\n", s1, s2, s3); // how to padding 10? s1s2 s3 s11s22 s3 s111s222 s3 您必须使用一点逻辑来计算要打印的空格数,例如: int s3_column = 15; // example posi
printf("%-10s%s\n", s1, s2);
我可以得到:
s1 s2
当前面的字符串可能具有不同的长度时,我希望s3位于固定列
printf("%s%s%s\n", s1, s2, s3); // how to padding 10?
s1s2 s3
s11s22 s3
s111s222 s3
您必须使用一点逻辑来计算要打印的空格数,例如:
int s3_column = 15; // example position
int length = printf("[%s%s]", s1, s2);
if ( length >= 0 && length < s3_column )
printf("%*s", (int)(s3_column - length), "");
printf("%s\n", s3);
ints3\u列=15;//示例位置
int length=printf(“[%s%s]”,s1,s2);
if(长度>=0&&length
正如评论中所建议的,另一种可能的方法是在自己的缓冲区中准备
[s1s2]
部分,但这需要额外的内存,并且会产生与内存分配相关的所有潜在问题,与我的示例中计算空格相比,这将是一个更复杂的代码。您必须使用一点逻辑来计算要打印多少空格,例如:
int s3_column = 15; // example position
int length = printf("[%s%s]", s1, s2);
if ( length >= 0 && length < s3_column )
printf("%*s", (int)(s3_column - length), "");
printf("%s\n", s3);
ints3\u列=15;//示例位置
int length=printf(“[%s%s]”,s1,s2);
if(长度>=0&&length
正如评论中所建议的,另一种可能的方法是在自己的缓冲区中准备
[s1s2]
部分,但这需要额外的内存,并且会产生与内存分配相关的所有潜在问题,与我的示例中计算空格相比,这将是更复杂的代码。每个%s
都包含一个n.m修饰符(%n.ms),用于将每个字符串放置在已知的起点(并避免溢出到下一个字符串所需的位置)然后确保'm'的总和将第三个字符串正好放在您希望它开始的位置
--或--
在第二个“输出格式转换”说明符之后使用ANSI转义序列将光标放置在第三个字符串开始的位置
--或--
运行ncurses窗口并使用movexy()
将光标放置在希望第三个字符串开始的位置
--或--
如果使用Borland的conio.h
库,则使用:
gotoxy()`
--或--
在窗户里
#include <windows.h>
void SetPosition(int X, int Y)
{
HANDLE Screen;
Screen = GetStdHandle(STD_OUTPUT_HANDLE);
COORD Position={X, Y};
SetConsoleCursorPosition(Screen, Position);
}
#包括
无效设置位置(整数X,整数Y)
{
手柄屏;
屏幕=GetStdHandle(标准输出句柄);
坐标位置={X,Y};
设置控制台位置(屏幕、位置);
}
每个%s
都包含一个n.m修饰符(%n.ms),将每个字符串放置在一个已知的起始点(并避免溢出到下一个字符串所需的位置),然后确保'm'的总和将第三个字符串正好放置在您希望它开始的位置
--或--
在第二个“输出格式转换”说明符之后使用ANSI转义序列将光标放置在第三个字符串开始的位置
--或--
运行ncurses窗口并使用movexy()
将光标放置在希望第三个字符串开始的位置
--或--
如果使用Borland的conio.h
库,则使用:
gotoxy()`
--或--
在窗户里
#include <windows.h>
void SetPosition(int X, int Y)
{
HANDLE Screen;
Screen = GetStdHandle(STD_OUTPUT_HANDLE);
COORD Position={X, Y};
SetConsoleCursorPosition(Screen, Position);
}
#包括
无效设置位置(整数X,整数Y)
{
手柄屏;
屏幕=GetStdHandle(标准输出句柄);
坐标位置={X,Y};
设置控制台位置(屏幕、位置);
}
缩进的值是多少?您希望字符串之间有多少填充?我认为当前面的字符串可能具有不同的长度时,他们希望在固定列上有s3
。缩进的值是多少?当早期的字符串可能具有不同的长度。有任何特定原因,您无法将s1
和s2
连接起来,并将它们一起传递给printf
?printf(“[%-10s]%s\n”,s1,s2)
打印[s1]s2
(但是有8个空格,决定删除)@kopecs为什么要浪费时间和空间来连接字符串,而你可以直接打印它们呢?有什么具体原因不能将s1
和s2
连接在一起并传递给printf
?printf([%-10s]%s\n”,s1,s2)
打印[s1]s2
(但是有8个空格,因此决定删除)@kopec为什么要浪费时间和空间来连接字符串,而您可以直接打印它们呢?出于好奇,第4行中的(int)
转换有什么意义?@rici*
的参数必须具有int
类型。在这段代码中,它是不必要的,但一般来说,人们可能会使用size\u t
表达式来进行这种计算,所以我习惯于总是将它包括在内,出于好奇,第4行中的(int)
转换有什么意义?@rici*
的参数必须具有类型int
。在这段代码中,这是不必要的,但一般来说,人们可能会使用size\u t
表达式来进行这种计算,所以我习惯于总是包含它