为什么–30只能显示“fu san”要怎么改才能显示“fu san ling”

#include
int main()
{
int a;
int t=1;
scanf("%d",&a);
if(a<0){
printf("fu ");
a=-a;
}
int b=a;
while(a>9){
a/=10;
t=t*10;
}
while(b>0){
int digit=b/t;if(b=0){
printf("ling");

}
switch (digit){
case 1:
printf("yi ");
break;
case 2:
printf("er ");
break;
case 3:
printf("san ");
break;
case 4:
printf("si ");
break;
case 5:
printf("wu ");
break;
case 6:
printf("liu ");
break;
case 7:
printf("qi ");
break;
case 8:
printf("ba ");
break;
case 9:
printf("jiu ");
break;
case 0:
printf("ling ");

}
b=b%t;
t=t/10;
}
return 0;
}

题主的代码修改如下,改动处见注释,供参考:

#include <stdio.h>
int main()
{
    int a;
    int t=1;
    scanf("%d",&a);
    if(a<0){
      printf("fu ");
      a=-a;
    }
    int b=a;
    while(a>9){
        a/=10;
        t=t*10;
    }
    while(t > 0){ //while(b>=0) 修改
        int digit = b/t;
        //if(b==0){//if(b=0)    修改
        //     printf("ling");  修改
        //}                     修改
        switch (digit){
            case 1:
               printf("yi ");
               break;
            case 2:
               printf("er ");
               break;
            case 3:
               printf("san ");
               break;
            case 4:
               printf("si ");
               break;
            case 5:
               printf("wu ");
               break;
            case 6:
               printf("liu ");
               break;
            case 7:
               printf("qi ");
               break;
            case 8:
               printf("ba ");
               break;
            case 9:
               printf("jiu ");
               break;
            case 0:
               printf("ling ");
               break;
        }
        b=b%t;
        t=t/10;
    }
    return 0;
}


#include <stdio.h>
int main()
{
    char *s[] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
    int digit[10];
    int n,y,i;
    scanf("%d", &n);
    if (n < 0)
    {
        n = -n;
        printf("fu ");
    }
    for(i=0;n;i++)
    {
        y = n % 10;
        digit[i] = y;
        n /= 10;
    }
    for (i=i-1; i > 0; i--)
        printf("%s ", s[digit[i]]);
    printf("%s", s[digit[0]]);
    return 0;
}