3

我遇到了一个代码:

#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

4 回答 4

2

如果您阅读例如此参考资料,您将看到

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

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

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

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

于 2013-11-21T10:47:07.010 回答
2

It prints n having length n

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

The star stands for:

The width is not specified in the format string, but as an additional integer value argument preceding the argument that has to be formatted.

Source: http://www.cplusplus.com/reference/cstdio/printf/

于 2013-11-21T10:46:30.743 回答
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

于 2013-11-21T10:47:14.593 回答
0

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

我将在这里尝试回答为什么您在使用的在线编译器中没有看到它。

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

于 2013-11-21T10:53:14.220 回答