C 在printf中设置可变文本列宽
为了确定C语言中列的大小,我们使用C 在printf中设置可变文本列宽,c,size,printf,C,Size,Printf,为了确定C语言中列的大小,我们使用%d。 例如,我可以键入%3d,它将给我一个宽度为3的列。 我的问题是,%后面的数字是我收到的一个变量,因此我需要类似于%xd(其中x是我在程序中收到的整数变量)。 但它不起作用 还有其他方法吗?您可以按如下方式执行此操作: printf("%*d", width, value); 来自李的评论: 也可以使用*表示精度: printf("%*.*f", width, precision, value); 请注意,wid
%d
。
例如,我可以键入%3d
,它将给我一个宽度为3的列。
我的问题是,%
后面的数字是我收到的一个变量,因此我需要类似于%xd
(其中x
是我在程序中收到的整数变量)。
但它不起作用
还有其他方法吗?您可以按如下方式执行此操作:
printf("%*d", width, value);
来自李的评论:也可以使用*表示精度:
printf("%*.*f", width, precision, value);
请注意,
width
和precision
必须具有int
类型,正如printf
所预期的那样。对于*
参数,typesize\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
试图解决相关问题,但该规范不适合简单使用。