首页 > 解决方案 > 当我用星号表示字段宽度时,它怎么少了一个空格?

问题描述

printf("12345678\n");
printf("%*c%*c, 2, 'a', 2, 'b');

在控制台上,我期望它a会在下方3b下方,6因为我理解它的方式是我在每个字符之前指示了两个空格。但是,输出显示a低于2b低于4

标签: cprintfplaceholderturbo-c

解决方案


原因是格式说明符前面的数字定义了字段宽度,而不是边距或填充。在 format%ns中, wheren是一个整数并且s是您选择的说明符,n它定义您为将替换说明符的内容保留 n 个空格。也就是说,如果替换说明符的信息需要超过 n 个空格,它将占用它需要的空格。

因此,如果您希望字母ab出现在下方3,并且6您需要为每个字母保留三个空格而不是两个。

printf("%*c%*c, 3, 'a', 3, 'b');

推荐阅读