使用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和一个带空格的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何用空格 printf() 填充值?

c语言如何输出有空格的字符串

如何将整型数据(int型),存在一个字符串中,然后用printf()打印这个字符串?

c语言,怎样输出有空格的字符串?

为啥 Python 在打印 int then string 后添加空格? [复制]

打印n个空格字符 - (f)printf格式