刚学getchar不太明白求解答

#include

int main()
{
char c1,c2;
int a1,a2;
c1=getchar();
scanf("%2d",&a1);
c2=getchar();
scanf("%3d",&a2);
printf("%d,%d,%c,%c\n",a1,a2,c1,c2);
return 0;
}
这个代码输入12a345b789↙为啥输出2 345 1 a?

c1接受了第一个字符就是1,然后%2d,只有2生效,然后c2接收掉a,a2接收三个整形345

c1 = getchar(),这样c1就是字符'1'
scanf("%2d",&a1),因为后面2个字符是2a,因此整数只能接收2,故a1 = 2
c2 = getchar(),接收第3个字符'a',引起前面a1只接收了2
scanf("%3d",&a2),接收a后面的三个整数,也就是345,所以a2=345

首先你要搞明白什么是字符,什么是数字
1是字符,2也是字符,12是2个字符
123456这是一个数字
getchar只接收一个字符,所以c1只会接收1,而不会管后面的字符
%d接收数字,但是1已经被读取走了,只剩2了,a不是数字,所以a1只会读取2
c2又读取一个字符a
a2读取345,遇到b,b不是数字,所以截断了