c程序入门基础pta遇到疑惑

几个问题:

  1. 【若变量定义为int x, y; ,则x + y = 22是符合C语言语法的表达式。】为什么错
  2. ret是什么东西
  3. 【 printf("%04d-%02d-%02d",year,month,day)】d前的04是什么意思
  4. 【编程】
    逆序三位数
    程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:
每个测试是一个3位的正整数。

输出格式:
输出按位逆序的数。

我的代码是:

#include
int main(void)
{
    int x,a,b,c;
    scanf("%d",&x);
    a=x/100;
    b=x/10%10;
    c=x%10;

     if (c!=0)
    {
     printf("%d%d%d",c,b,a);
    }
    else if(c==0&&b==0)
    {
    printf("%d",a);    
    }
    else if(c==0&&b!=0)
    {
    printf("%d%d",b,a);
    }   
    return 0;

我的疑问是:为什么 scanf("%d",&x)不可以写成


scanf("%d%d%d",&a,&b,&c)

每个测试是一个3位的正整数。
如果写成scanf("%d%d%d",&a,&b,&c),那么这个正整数会被a接收掉的。b和c还会等着你输入
反之你可以将3位正整数看作三个字符
char a,b,c;
scanf("%c%c%c",&a,&b,&c);这样a,b,c就是三个数字字符了。
分别减去'0',就是拆分出来的三个数字