循环赋值出错,位置混乱,找不出原因。

#include<cstdio>
using namespace std;

char x[3][3];
    
int main()
{
    int i,j;
    char b;
    for(i=0;i<4;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%c",&b);
            x[i][j] = b;
        }
    }
  return 0;
}

问题是如果我在for循环里加入一句↓。


int main()
{
    int i,j;
    char b;
    for(i=0;i<4;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%c",&b);
            x[i][j] = b;
                        printf("%c",x[i][j]);
        }
    }
  return 0;
}

输出也正常。
可是当我去掉检验,比如x[2][0] x[1][3]啥的,就不对了
同学说,回车占一个字符,但是我还是不明白……