C语言中的%*d是什么?

3

我发现了一段代码:

#include<stdio.h>
int main(){
    int n=5;
    printf("\nn=%*d",n,n);
    return 0;
}

它的输出结果是:n= 5。我知道%*d允许两个参数并返回字段宽度。然而,我试图将n的值更改为9。但输出格式仍然相同(即n= 9)。而且,我不确定我是否正确理解了%*d和字段宽度。

因此我的问题是,C语言中的%*d和字段宽度是什么。

谢谢。

编辑:

好的,谢谢大家。我现在明白了,这是我的编译器将空格组合成一个空格。


1
请查看此处链接:http://www.cplusplus.com/reference/cstdio/printf/ - Florian Groetzner
使用9可以提供更多的空间。 - this
@self。我使用http://www.compileonline.com/compile_c_online.php,并且使用代码`#include<stdio.h> int main(){ int n=9; printf("\nn=%*d",n,n); return 0; }得到的输出是n= 9`。 - Gaurang Tandon
4个回答

2

在格式字符串中,well * 指定最小字段宽度...例如,如果我给出 n=6541 和 field=4,那么使用 printf("%*d",field,n)...将打印 6541 而不带任何额外的空格。但在你的情况下,n=9,它占用了 1 个空格,所以剩余的 8 个空格将被添加。 - Rakesh_Kumar

2
如果你阅读例如这个参考资料,你会看到:
整数值或*指定最小字段宽度。如果需要,在右对齐时用空格字符(默认情况下)填充结果,或在左对齐时在右侧填充。在使用*的情况下,宽度由int类型的附加参数指定。如果参数的值为负,则结果为指定了-标志和正字段宽度。
因此,星号告诉printf从参数中获取字段宽度。由于在您的例子中n是5,输出将是四个空格和数字5,总共五个字符宽度。
如果您在在线编译器中执行此操作,请记住Web浏览器不会显示文本中的所有空格,除非在例如
块中或者它们是非断开空格(如 )。
我建议您在自己的计算机上的文本控制台中执行此操作,或尝试另一个可以正确格式化输出的在线编译器。

1

好的,我使用了另一个编译器并得到了你所说的结果。谢谢。顺便问一下,你在这个答案中交换了5和9的输出吗? - Gaurang Tandon
1
@GaurangTandon 是的 :), 我正在同时处理多个任务。 - this

0

所有的答案以及你的理解都是正确的。它确实调整了字段宽度。

我会在这里尝试回答为什么你在使用在线编译器时没有看到它。

实际上,它根据你的代码打印9或5个空格。但是,这是HTML,它将多个空格压缩为单个空格。如果你想看到精确的输出,请检查输出面板页面的HTML源代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接