在printf语句中,"%3d"是什么意思?

11
在这段代码中,符号%3d的作用是什么?我知道百分号代表引用一个变量。
这是代码:
#include <stdio.h>
int main(void)
{
    int t, i, num[3][4];
    for(t=0; t<3; ++t)
        for(i=0; i<4; ++i)
            num[t][i] = (t*4)+i+1;
    /* now print them out */
    for(t=0; t<3; ++t) {
        for(i=0; i<4; ++i)
            printf("%3d ", num[t][i]);
        printf("\n");
    }
    return 0;
}

1
https://dev59.com/unE85IYBdhLWcg3wbS_1 - Greg
吹毛求疵:那很可能是C代码,而不是C ++。 - Konrad Rudolph
投票为重复项与上文-我们不需要一个单独的“%Nd是什么意思?”适用于每个可能的“N”。 - Georg Fritzsche
8个回答

22

%3d可以分解如下:

  • %表示“在此处打印一个变量”
  • 3表示“使用至少3个空格进行显示,需要时填充空格”
  • d表示“该变量将是一个整数”

将它们组合起来,它的意思是“打印一个整数,至少占用3个空格”

更多信息请参见http://www.cplusplus.com/reference/clibrary/cstdio/printf/


12

这是一个用于打印至少三位数(3)的十进制数字(d)的格式说明符。

来自 man printf

一个可选的十进制数字字符串指定了最小字段宽度。如果转换后的值的字符数少于字段宽度,则会在左侧(或右侧,如果给出了左对齐标志)填充空格以填满字段宽度。


opengroup.org更好:http://www.opengroup.org/onlinepubs/9699919799/functions/fprintf.html - Potatoswatter

6

看这里:

Print("%3d",X);

  • 如果X是1234,它会打印1234
  • 如果X是123,它会打印123
  • 如果X是12,它会打印_12,其中_是前导单个空格字符。
  • 如果X是1,它会打印__1,其中__是两个前导空格字符。

1
一个例子来启发现有的答案:

printf("%3d" , x);

何时:

x 为 1234 时打印 1234

x 为 123 时打印 123

x 为 12 时打印 12,带有一个额外的填充(空格)

x 为 1 时打印 1,带有两个额外的填充(空格)


1
你可以在%和d(十进制)之间指定字段宽度。它代表要打印的字符总数。 正值(如另一个答案中所述)会右对齐输出,这是默认设置。 负值会左对齐文本。 例如:
int a = 3;
printf("|%-3d|", a);

输出:

|3  |

你也可以使用 * 字符作为附加参数来指定字段宽度:
int a = 3;
printf("|%*d|", 5, a);

which gives:

|    3|

0

2/3或任何整数都是填充/宽度。这意味着例如对于3,最小的空间为3个,如果我们打印a=4,那么它会打印为4,在4之前有两个空格,因为它只是一个字符。


你正在回答一个相当古老的问题,该问题已经有一些得到认可的答案。我看不出你的回答有任何附加价值。那么,你发帖的原因是什么? - honk

0

这是一个格式化规范。%3d 表示:将参数打印为三位数的十进制数。


0

字面上来说,它的意思是打印一个用空格填充为三位数字的整数。%引入了格式说明符,3表示3个数字,d表示整数。因此,num[t][i]的值将被打印到屏幕上,例如“ 1”,“ 2”,“ 12”等值。


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