为什么我这个判断自守数的函数后面打印的时候只能打印出一个1?

#include<stdio.h>
int pd(int n){
int j,a,m,i,count=1;
m=n*n;
int b=n;
do{
n=n/10;
i++;
}while(n!=0);
a=m-b;
for(j=1;j<=i;j++){
if(a%10!=0) return 0;
a=a/10;
}
return 1;
}
int main(void){
int n,i=0,a;
scanf("%d",&n);
for(i=1;i<n;i++){
if(a!=0) printf("%d\n",i);
}
return 0;
}

修改见注释处,供参考:

#include<stdio.h>
int pd(int n) {
    int j, a, m, i=0;//修改 count=1
    m = n * n;
    int b = n;
    do {
        n = n / 10;
        i++;
    } while (n != 0);
    a = m - b;
    for (j = 1; j <= i; j++) {
        if (a % 10 != 0) return 0;
        a = a / 10;
    }
    return 1;
}
int main(void) {
    int n, i = 0, a;
    scanf("%d", &n);
    for (i = 1; i < n; i++) {
        a = pd(i);                //修改
        if (a != 0) printf("%d\n", i);
    }
    return 0;
}