pta乙级第二题为啥总是有个测试点过不去

img

#include <stdio.h>

void swtich_p(int h)                                //将数字转化为汉字拼音
{
    switch (h)
    {
    case 1:printf_s("yi"); break;
    case 2:printf_s("er"); break;
    case 3:printf_s("san"); break;
    case 4:printf_s("si"); break;
    case 5:printf_s("wu"); break;
    case 6:printf_s("liu"); break;
    case 7:printf_s("qi"); break;
    case 8:printf_s("ba"); break;
    case 9:printf_s("jiu"); break;
    case 0:printf_s("ling"); break;
    }
}

int main(void)
{
    int m=0,num=0;
    while ((m = getchar()) != '\n')                    //单独取出每一位数
    if(m <= 57 && m >= 48) num += (m - 48);            //滤掉非数字字符(这是后来加的加了也没用还是过不了),将数字字符的acill转化为数字,并相加
    
    do
    {
        if (num / 100)
        {
            swtich_p(num / 100);
            num -= 100 * (num / 100);
        }
        else if (num / 10)
        {
            swtich_p(num / 10);
            num -= 10 * (num / 10);
        }
        else
        {
            swtich_p(num);
            num /= 10;
        }
    }
    while (num != 0 && printf_s(" "));                //短路运算字符间留“ ”
    return 0;
}

来来回回改了几遍还是过不去

img

你没有控制输入的数字个数不超过100

供参考:

#include<stdio.h>

int main()
{
    int  a[10]={0},m=0,i=0;
    char *s[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    char ch;
    while((ch=getchar())!='\n'){
           if(ch>='0' && ch<='9') m += ch-'0';
    }
    while(m){
           a[i++] = m%10;
           m /= 10;
    }
    for(i--;i>=0;i--)
           printf("%s%c",s[a[i]],i==0?'\n':' ');
    return 0;
}