求大神帮我看看为什么我的程序输出总是0

right代表A前面的数字,意思是数字猜对,位置也对
good代表B前面的数字

#include
#include

int main()
{
int k,j,good,right;
short a[4],b[4];
srand(time(NULL));
a[0] = rand()%10;
do
{
a[1] = rand()%10;
}while (a[0] == a[1]);
do
{
a[2] = rand()%10;
}while (a[0] == a[2] || a[1] == a[2]);
do
{
a[3] = rand()%10;
}while (a[0] == a[3] || a[1] == a[3] || a[2] == a[3]);
do
{
printf("输入你猜的数:");
scanf("%d",&b[4]);
right = 0;
for(j=0;j<4;j++)
{
if(a[j] == b[j])
{
right = right + 1;
}
}
good = 0;
for(j=0;j<4;j++)
{
for(k=0;k<4;k++)
{
if(a[k] == b[j])
{
good = good + 1;
}
}
}
good = good - right;
printf("%dA%dB\n",right,good);
}while(right!=4);
if(right == 4)
printf("恭喜你猜对了\n");
return 0;
}
图片说明图片说明图片说明

开头加上int tmp;

printf("输入你猜的数:");
        scanf("%d", &tmp);
        j = 3;
        while (j >= 0) {
            b[j--] = tmp % 10;
            tmp /= 10;
        }