这主要是printf的输出格式问题。
printf的标准格式是:printf("格式说明字符",输出列表项);
其中格式说明字符形式为:% 格式字符串
格式字符串的一般形式:%[-][0][m][.n] 格式字符
% 表示格式说明的起始符号
- 表示输出项左对齐输出,省略则表示右对齐
0 表示空位填充0,省略则表示不填充
m 表示域宽,即对应的输出项在输出设备上所占的字符数
.n 输出浮点数时n指精度(小数位数),省略n则输出6位小数;输出字符串时,表示输出左起n个字符

因此printf("%3d",c)表示域宽为3,即输出3位;printf("%d",c)根据c的值确定位宽。


%c  单个字符
%d  十进制有符号整数
%e  指数形式的浮点数
%f  浮点数
%g  自动选择合适的表示法
%p 指针的值
%s  字符串
%u  十进制无符号整数
%x, %X  无符号以十六进制表示的整数
0% 无符号以八进制表示的整数