#include <stdio.h>
int main() {
int a=0,b=0,c=0;
scanf("%4d%2d%2d",&a,&b,&c);
printf("year=%d\n",a);
printf("month=%02d\n",b);
printf("date=%02d",c);
return 0;
}
所用知识点:
通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据;通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
转换规则(转自牛客网评论):
scanf内的%4d中间的4表示最小字段宽度,%4d表示取出4个数存入int类型。
而printf中%02d中的0表示输出时候不满最小字节宽度,自动补0,而那个2就是最小字节宽度了。
%d:
他的组成是%(标志)(最小字节宽度)(精度)(长度指示符)(转换操作)组成。
标志:
-、+、#、0。-表示输出的向左看齐,+表示输出始终带正负,#表示输出十六进制的时候带0x、八进制的时候带0,0表示不满最小字节宽度的时候把空格填充物换成0。
最小字节宽度:
就是输出的最小位数,不满最小字节宽度时补空格到指定宽度,满出则不进行操作,使用时只需要在指定位置输入正整数如题目里%4d内的4。
精度:
这个我前面的题解有说到,写法是.x,点表示小数后的精度,x表示精确到小数后几位。
长度指示符:
这个之前的题解也有说道,分别是hh、h、l、ll四个等级。
转换操作:
也就是我们常用的那个,d表示转换成int类型,c表示char字符类型,s表示字符串,e\E表示双精度浮点型并用e\E计数法表示,f表示双精度浮点数型并十进制表示,o表示无符号八进制,u表示无符号十进制,x\X表示无符号十六进制。