C 在printf中设置可变文本列宽

C 在printf中设置可变文本列宽,c,size,printf,C,Size,Printf,为了确定C语言中列的大小,我们使用%d。 例如,我可以键入%3d,它将给我一个宽度为3的列。 我的问题是,%后面的数字是我收到的一个变量,因此我需要类似于%xd(其中x是我在程序中收到的整数变量)。 但它不起作用 还有其他方法吗?您可以按如下方式执行此操作: printf("%*d", width, value); 来自李的评论: 也可以使用*表示精度: printf("%*.*f", width, precision, value); 请注意,wid

为了确定C语言中列的大小,我们使用
%d
。 例如,我可以键入
%3d
,它将给我一个宽度为3的列。 我的问题是,
%
后面的数字是我收到的一个变量,因此我需要类似于
%xd
(其中
x
是我在程序中收到的整数变量)。 但它不起作用


还有其他方法吗?

您可以按如下方式执行此操作:

printf("%*d", width, value);
来自李的评论:
也可以使用*表示精度:

printf("%*.*f", width, precision, value);

请注意,
width
precision
必须具有
int
类型,正如
printf
所预期的那样。对于
*
参数,type
size\u t
是不合适的,因为它在目标平台上可能具有不同的大小和表示形式。

仅为了完整性,要提到的是,对于兼容POSIX的版本,您还可以将实际字段宽度(或精度)值放在参数列表的其他位置,并使用基于1的参数编号后跟美元符号来引用:

字段宽度或精度,或两者都可以用星号表示∗’ 或星号后跟一个或多个十进制数字和“$”而不是数字字符串。在本例中,int参数提供字段宽度或精度。负场宽被视为左调整标志,后跟正场宽;负精度被视为丢失。如果单个格式指令混合了位置参数(nn$)和非位置参数,则结果未定义


例如,
printf(“%1$*d”,宽度,值)

通常,您应该复制粘贴收到的准确错误消息,而不是“不工作”。@luserdroog当
printf
失败时,没有错误消息。它只是默默地给出不正确的输出。这与八年前的问题有关吗?你得到了什么样的产出?你期望得到什么?调用是什么样子的?您的示例与语言不符。它应该是
“%*1$d”
此外,您应该通过
n$
指定这两个参数,如下所示:
printf(“%2$*1$d”,宽度,值)
。这对scanf有效吗?@SouravKannanthaB:否这对
scanf
无效:
*
表示禁止赋值,并且没有为此转换规范提供指针参数。无法将数字指定为参数,但可以使用
snprintf
编写格式字符串作为解决方法<代码>附录K中的scanf_s
试图解决相关问题,但该规范不适合简单使用。