想问一下这个程序出什么问题了?永远比样例输出少一位

#include<stdio.h>
#define N 100
int main()
{
int n, a[N], b;
int i = 0;

while (scanf_s("%X", &n) == 1 )
{
    b = n;
    {while (n > 0)
    {
        a[i] = n % 2;
        i = i + 1;
        n = n / 2;
    }
    printf("0b");
    for (i--; i >-1; i--)
    {
        printf("%d", a[i]);
    }
    printf("\n");
    }
    printf("0%o\n", b);
    printf("%d\n", b);
    printf("0x%x\n", b);
}

}

img

想问一下这个程序出什么问题了?永远比样例输出少一位

i在循环里没有初始化,导致只有第一次结果正确,后续循环中i的值是从-1开始的

while里的b = n;前或后加一句
i = 0;