什么是c中的%* d?

时间:2013-11-21 10:43:23

标签: c format-specifiers

我遇到了一个代码:

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

输出:n= 5。我知道%*d允许两个参数并返回字段宽度。但是,我尝试将n的值更改为9。但输出的格式相同(即n= 9)。此外,我并非100%确定我正确理解%*d和字段宽度。

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

感谢。

编辑:

好的,谢谢大家。我现在已经明白,正是我的编译器将空间合二为一。

4 个答案:

答案 0 :(得分:2)

打印长度为n的n

printf("\nn=%*d",n,n);

明星代表:

  

宽度未在格式字符串中指定,但作为附加   必须在参数前面的整数值参数   格式化。

来源:http://www.cplusplus.com/reference/cstdio/printf/

答案 1 :(得分:2)

如果您阅读例如this reference你会看到

  

整数值或*,指定最小字段宽度。如果需要,结果将填充空格字符(默认情况下),右对齐时填充左侧,如果左对齐则填充右侧。在使用*的情况下,宽度由int类型的附加参数指定。如果参数的值为负,则会产生指定的 - 标志和正字段宽度。

因此星号告诉printf从参数中获取字段宽度。由于您的示例中n5,因此输出将为四个空格,数字为5,总宽度为五个字符。

如果您在在线编译器中执行此操作,请记住,Web浏览器不会显示文本中的所有空格,除非在例如一个<pre>块或者如果它们是非中断空格(如&nbsp;)。

我建议您在自己的计算机上的文本控制台中执行此操作,或尝试使用其他正确格式化输出的在线编译器。

答案 2 :(得分:1)

使用9:

n=        9Press any key to continue...

使用5:

n=    5Press any key to continue...

该在线编译器显然将所有空间合并为一个。

使用更好的一个:

5:http://ideone.com/WMrki5

9:http://ideone.com/E1lGj7

答案 3 :(得分:0)

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

我将尽力回答您为什么没有在online compiler中看到它。

根据您的代码,它实际上会打印9或5个空格。然而,它是HTML,它将多个空格压缩为单个空白区域。如果要查看确切的输出,请检查输出面板页面的HTML源代码。