在这里详细说一下转换规则这个东西,他跟printf以及scanf息息相关

这里的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表示无符号十六进制。

其中一些详解可以看我之前的题解。

附上代码
#include <stdio.h>

int main() {
    int date[3] = {0};
    scanf("%4d%2d%2d", &date[0], &date[1], &date[2]);
    printf("year=%d\nmonth=%02d\ndate=%02d", date[0], date[1], date[2]);
    return 0;
}