格式字符设定的大小与输入字符个数不匹配的问题

从键盘输入:54321<回车> 为什么结果为1?
1.它是怎么给a和b赋值的?
第一个:

#include <stdio.h>
int main()
{ 
    int a,b,s;
    scanf("%2d%2d",&a,&b);
    s=a/b;
    printf("s=%d",s);
    return 0;
}

2.如果我输入的值的字符大于它设置的字符的大小,那么输出又是多少?
第二个

#include<stdio.h>
int main()
{
    float a=1234.56789,b=55.321;
    printf("a=%4.2f,b=%5.1f\n",a,b);
    return 0;
}

下面是我的理解,供参考:


#include <stdio.h>
int main()
{ 
    int c,d,s;
    //%2d 是说读取最大字段的宽度 即读取一个两位数或读取到第一次遇到空白 
    //这里是从输入读取两个两位数到变量c和变量d,输入54321,就是c=54,d=32 
    scanf("%2d%2d",&c,&d);
    
    //然后int型变量相除,是取整数部分,54/32=1.6875,取整即等于1 
    s=c/d;
    printf("c=%d,d=%d,s=%d\n",c,d,s);
    
    float a=1234.56789,b=55.321;
  //  float a= 1.1,b=2.2;
    //%4.2f  4把后面对应的变量a打印最低四个字段的长度,结果的位数大于4就自动扩充,然后.2是说打印两位小数(第三位小数四省五入) 
    //%5.1f 同理 5打印最长5个字段,少的位数用空格代替 .1打印1位小数(第二位小数四省五入) 
    printf("a=%4.2f,b=%5.1f\n",a,b);
  
    return 0;
}



img