我遇到了一个代码:
#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中的字段宽度是什么。
感谢。
好的,谢谢大家。我现在已经明白,正是我的编译器将空间合二为一。
答案 0 :(得分:2)
打印长度为n的n
printf("\nn=%*d",n,n);
明星代表:
宽度未在格式字符串中指定,但作为附加 必须在参数前面的整数值参数 格式化。
答案 1 :(得分:2)
如果您阅读例如this reference你会看到
整数值或*,指定最小字段宽度。如果需要,结果将填充空格字符(默认情况下),右对齐时填充左侧,如果左对齐则填充右侧。在使用*的情况下,宽度由int类型的附加参数指定。如果参数的值为负,则会产生指定的 - 标志和正字段宽度。
因此星号告诉printf
从参数中获取字段宽度。由于您的示例中n
为5
,因此输出将为四个空格,数字为5
,总宽度为五个字符。
如果您在在线编译器中执行此操作,请记住,Web浏览器不会显示文本中的所有空格,除非在例如一个<pre>
块或者如果它们是非中断空格(如
)。
我建议您在自己的计算机上的文本控制台中执行此操作,或尝试使用其他正确格式化输出的在线编译器。
答案 2 :(得分:1)
使用9:
n= 9Press any key to continue...
使用5:
n= 5Press any key to continue...
该在线编译器显然将所有空间合并为一个。
使用更好的一个:
答案 3 :(得分:0)
所有答案以及您的理解都是正确的。它会调整字段宽度。
我将尽力回答您为什么没有在online compiler中看到它。
根据您的代码,它实际上会打印9或5个空格。然而,它是HTML,它将多个空格压缩为单个空白区域。如果要查看确切的输出,请检查输出面板页面的HTML源代码。