我用星号表示字段宽度时,怎么少了一个space?
When I use the asterisk to indicate the field width, how come it is missing one space?
printf("12345678\n");
printf("%*c%*c, 2, 'a', 2, 'b');
在控制台上,我预计 a
会低于 3
,b
会低于 6
,因为我的理解是我指出了两个空格在每个字符之前。但是,输出显示 a
低于 2
并且 b
低于 4
.
原因是格式说明符前面的数字定义了字段宽度,而不是边距或填充。在格式 %ns
中,其中 n
是一个整数,s
是您选择的说明符,n
定义您为要替换的内容保留 n 个空格说明符与。也就是说,如果替换说明符的信息需要多于 n 个空格,它将占用所需的空间。
因此,如果您希望字母 a
和 b
出现在 3
和 6
下方,您需要为每个字母保留三个空格而不是两个。
printf("%*c%*c, 3, 'a', 3, 'b');
printf("12345678\n");
printf("%*c%*c, 2, 'a', 2, 'b');
在控制台上,我预计 a
会低于 3
,b
会低于 6
,因为我的理解是我指出了两个空格在每个字符之前。但是,输出显示 a
低于 2
并且 b
低于 4
.
原因是格式说明符前面的数字定义了字段宽度,而不是边距或填充。在格式 %ns
中,其中 n
是一个整数,s
是您选择的说明符,n
定义您为要替换的内容保留 n 个空格说明符与。也就是说,如果替换说明符的信息需要多于 n 个空格,它将占用所需的空间。
因此,如果您希望字母 a
和 b
出现在 3
和 6
下方,您需要为每个字母保留三个空格而不是两个。
printf("%*c%*c, 3, 'a', 3, 'b');