使用printf后如何打印一个int和一个带空格的字符串?
Posted
技术标签:
【中文标题】使用printf后如何打印一个int和一个带空格的字符串?【英文标题】:How to print an int and a string with spaces after using printf? 【发布时间】:2022-01-18 20:13:32 【问题描述】:我通常使用printf("%-8d",a);
,例如在(包括)整数之后的 8 个空格。
我的代码:
#include <stdio.h>
#include <string.h>
int main()
int a = 10;
char b = "Hello";
如何打印:'#10-Hello '
有 16 个空格(8 是整数和字符串,后面是 8 个空格)?
【问题讨论】:
char b = "Hello"
是语法错误,请改用 char 数组
请准确显示您想要得到的输出。
@Gerhardh 我修正了他的格式,所以很清楚他想要什么
所以,“空格”不是指空格(' '
),而是输出中的任何字符。
他想在 16 个字符的字段中打印#a-b
,并用空格填充。
【参考方案1】:
分两步完成。首先将数字和字符串与sprintf()
结合起来,然后将生成的字符串打印在一个 16 个字符的字段中。
int a = 10;
char *b = "Hello";
char temp[20];
sprintf(temp, "#%d-%s", a, b);
printf("%-16s", temp);
【讨论】:
也许snprintf()
用更新的代码防止缓冲区溢出?【参考方案2】:
一个制表符是 8 个空格,所以,你可以添加 \t\t 以下是打印您想要的内容的超级基本方法。
printf('#' + a + '-' + b + '\t\t');
我对 C 的语法不太熟悉,所以可能是:
printf('#', a, '-', b, '\t\t');
另外,正如前面的回答中提到的,“Hello”不是字符,而是字符数组或字符串。
【讨论】:
【参考方案3】:#include <stdio.h>
#include <string.h>
int main()
int a = 10;
char b[] = "Hello";
printf("#%d-%-17s",a,b);
这应该可以完成工作,根据需要调整间距
【讨论】:
正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案4】:可以用 2 个printf()
s 做到这一点。使用第一个的返回值知道它的打印长度,然后打印形成宽度为 16 所需的空格。不需要临时缓冲区。
#include <assert.h>
#include <stdio.h>
int main(void)
int width = 16;
int a = 10;
char *b = "Hello"; // Use char *
int len = printf("#%d-%s", a, b);
assert(len <= width && len >= 0);
printf("%*s", width - len, ""); // Print spaces
【讨论】:
以上是关于使用printf后如何打印一个int和一个带空格的字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何将整型数据(int型),存在一个字符串中,然后用printf()打印这个字符串?